From f7ccc706ea74b001d290477281d89ea80f56cfc3 Mon Sep 17 00:00:00 2001 From: bergben Date: Wed, 3 Jul 2024 17:03:17 +0200 Subject: [PATCH 001/105] fluid: add arbitrum --- fees/fluid/index.ts | 395 ++++++++++++++++++++++++++++++++------------ 1 file changed, 285 insertions(+), 110 deletions(-) diff --git a/fees/fluid/index.ts b/fees/fluid/index.ts index afe9f70909..087bed196c 100644 --- a/fees/fluid/index.ts +++ b/fees/fluid/index.ts @@ -4,49 +4,229 @@ import BigNumber from "bignumber.js"; import { Adapter, FetchV2 } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -const fluidLiquidity = "0x52aa899454998be5b000ad077a46bbe360f4e497"; - -const fluidRevenueResolverExistAfterBlock = 19784319; -const fluidRevenueResolver = "0x0F683159f14857D61544650607549Cdc21abE774"; -const fluidRevenueResolverAbi = { - calcRevenueSimulatedTime: - "function calcRevenueSimulatedTime(uint256 totalAmounts_,uint256 exchangePricesAndConfig_,uint256 liquidityTokenBalance_,uint256 simulatedTimestamp_) public view returns (uint256 revenueAmount_)", - getRevenue: - "function getRevenue(address token_) public view returns (uint256 revenueAmount_)", +const abis = { + revenueResolver: { + calcRevenueSimulatedTime: + "function calcRevenueSimulatedTime(uint256 totalAmounts_,uint256 exchangePricesAndConfig_,uint256 liquidityTokenBalance_,uint256 simulatedTimestamp_) public view returns (uint256 revenueAmount_)", + getRevenue: + "function getRevenue(address token_) public view returns (uint256 revenueAmount_)", + }, + liquidityResolver: { + listedTokens: + "function listedTokens() public view returns (address[] listedTokens_)", + getExchangePricesAndConfig: + "function getExchangePricesAndConfig(address token_) public view returns (uint256)", + getTotalAmounts: + "function getTotalAmounts(address token_) public view returns (uint256)", + }, + vaultResolver_before_19992222: { + getAllVaultsAddresses: + "function getAllVaultsAddresses() external view returns (address[] vaults_)", + getVaultEntireData: + "function getVaultEntireData(address vault_) view returns ((address vault, (address liquidity, address factory, address adminImplementation, address secondaryImplementation, address supplyToken, address borrowToken, uint8 supplyDecimals, uint8 borrowDecimals, uint256 vaultId, bytes32 liquiditySupplyExchangePriceSlot, bytes32 liquidityBorrowExchangePriceSlot, bytes32 liquidityUserSupplySlot, bytes32 liquidityUserBorrowSlot) constantVariables, (uint16 supplyRateMagnifier, uint16 borrowRateMagnifier, uint16 collateralFactor, uint16 liquidationThreshold, uint16 liquidationMaxLimit, uint16 withdrawalGap, uint16 liquidationPenalty, uint16 borrowFee, address oracle, uint256 oraclePrice, address rebalancer) configs, (uint256 lastStoredLiquiditySupplyExchangePrice, uint256 lastStoredLiquidityBorrowExchangePrice, uint256 lastStoredVaultSupplyExchangePrice, uint256 lastStoredVaultBorrowExchangePrice, uint256 liquiditySupplyExchangePrice, uint256 liquidityBorrowExchangePrice, uint256 vaultSupplyExchangePrice, uint256 vaultBorrowExchangePrice, uint256 supplyRateVault, uint256 borrowRateVault, uint256 supplyRateLiquidity, uint256 borrowRateLiquidity, uint256 rewardsRate) exchangePricesAndRates, (uint256 totalSupplyVault, uint256 totalBorrowVault, uint256 totalSupplyLiquidity, uint256 totalBorrowLiquidity, uint256 absorbedSupply, uint256 absorbedBorrow) totalSupplyAndBorrow, (uint256 withdrawLimit, uint256 withdrawableUntilLimit, uint256 withdrawable, uint256 borrowLimit, uint256 borrowableUntilLimit, uint256 borrowable, uint256 minimumBorrowing) limitsAndAvailability, (uint256 totalPositions, int256 topTick, uint256 currentBranch, uint256 totalBranch, uint256 totalBorrow, uint256 totalSupply, (uint256 status, int256 minimaTick, uint256 debtFactor, uint256 partials, uint256 debtLiquidity, uint256 baseBranchId, int256 baseBranchMinima) currentBranchState) vaultState, (bool modeWithInterest, uint256 supply, uint256 withdrawalLimit, uint256 lastUpdateTimestamp, uint256 expandPercent, uint256 expandDuration, uint256 baseWithdrawalLimit, uint256 withdrawableUntilLimit, uint256 withdrawable) liquidityUserSupplyData, (bool modeWithInterest, uint256 borrow, uint256 borrowLimit, uint256 lastUpdateTimestamp, uint256 expandPercent, uint256 expandDuration, uint256 baseBorrowLimit, uint256 maxBorrowLimit, uint256 borrowableUntilLimit, uint256 borrowable) liquidityUserBorrowData) vaultData_)", + }, + vaultResolver_after_19992222: { + getAllVaultsAddresses: + "function getAllVaultsAddresses() external view returns (address[] vaults_)", + getVaultEntireData: + "function getVaultEntireData(address vault_) view returns ((address vault, (address liquidity, address factory, address adminImplementation, address secondaryImplementation, address supplyToken, address borrowToken, uint8 supplyDecimals, uint8 borrowDecimals, uint256 vaultId, bytes32 liquiditySupplyExchangePriceSlot, bytes32 liquidityBorrowExchangePriceSlot, bytes32 liquidityUserSupplySlot, bytes32 liquidityUserBorrowSlot) constantVariables, (uint16 supplyRateMagnifier, uint16 borrowRateMagnifier, uint16 collateralFactor, uint16 liquidationThreshold, uint16 liquidationMaxLimit, uint16 withdrawalGap, uint16 liquidationPenalty, uint16 borrowFee, address oracle, uint256 oraclePriceOperate, uint256 oraclePriceLiquidate, address rebalancer) configs, (uint256 lastStoredLiquiditySupplyExchangePrice, uint256 lastStoredLiquidityBorrowExchangePrice, uint256 lastStoredVaultSupplyExchangePrice, uint256 lastStoredVaultBorrowExchangePrice, uint256 liquiditySupplyExchangePrice, uint256 liquidityBorrowExchangePrice, uint256 vaultSupplyExchangePrice, uint256 vaultBorrowExchangePrice, uint256 supplyRateVault, uint256 borrowRateVault, uint256 supplyRateLiquidity, uint256 borrowRateLiquidity, uint256 rewardsRate) exchangePricesAndRates, (uint256 totalSupplyVault, uint256 totalBorrowVault, uint256 totalSupplyLiquidity, uint256 totalBorrowLiquidity, uint256 absorbedSupply, uint256 absorbedBorrow) totalSupplyAndBorrow, (uint256 withdrawLimit, uint256 withdrawableUntilLimit, uint256 withdrawable, uint256 borrowLimit, uint256 borrowableUntilLimit, uint256 borrowable, uint256 borrowLimitUtilization, uint256 minimumBorrowing) limitsAndAvailability, (uint256 totalPositions, int256 topTick, uint256 currentBranch, uint256 totalBranch, uint256 totalBorrow, uint256 totalSupply, (uint256 status, int256 minimaTick, uint256 debtFactor, uint256 partials, uint256 debtLiquidity, uint256 baseBranchId, int256 baseBranchMinima) currentBranchState) vaultState, (bool modeWithInterest, uint256 supply, uint256 withdrawalLimit, uint256 lastUpdateTimestamp, uint256 expandPercent, uint256 expandDuration, uint256 baseWithdrawalLimit, uint256 withdrawableUntilLimit, uint256 withdrawable) liquidityUserSupplyData, (bool modeWithInterest, uint256 borrow, uint256 borrowLimit, uint256 lastUpdateTimestamp, uint256 expandPercent, uint256 expandDuration, uint256 baseBorrowLimit, uint256 maxBorrowLimit, uint256 borrowableUntilLimit, uint256 borrowable, uint256 borrowLimitUtilization) liquidityUserBorrowData) vaultData_)", + }, + vault: { + constantsView: + "function constantsView() public view returns((address liquidity,address factory,address adminImplementation,address secondaryImplementation,address supplyToken,address borrowToken,uint8 supplyDecimals,uint8 borrowDecimals,uint vaultId,bytes32 liquiditySupplyExchangePriceSlot,bytes32 liquidityBorrowExchangePriceSlot,bytes32 liquidityUserSupplySlot,bytes32 liquidityUserBorrowSlot))", + }, }; -const fluidLiquidityResolver = "0x741c2Cd25f053a55fd94afF1afAEf146523E1249"; -const fluidLiquidityResolverAbi = { - listedTokens: - "function listedTokens() public view returns (address[] listedTokens_)", - getExchangePricesAndConfig: - "function getExchangePricesAndConfig(address token_) public view returns (uint256)", - getTotalAmounts: - "function getTotalAmounts(address token_) public view returns (uint256)", +const revenueResolver = async (api: sdk.ChainApi) => { + const block = await api.getBlock(); + + let address; + let abi = abis.revenueResolver; + switch (api.chain) { + case CHAIN.ETHEREUM: + if (block < 19784319) { + break; // fluid RevenueResolver Exist After Block 19784319 + } + if (block < 20138676) { + address = "0x0F683159f14857D61544650607549Cdc21abE774"; + break; + } + address = "0xFe4affaD55c7AeC012346195654634F7C786fA2c"; + break; + case CHAIN.ARBITRUM: + address = "0xFe4affaD55c7AeC012346195654634F7C786fA2c"; + break; + } + + return { + calcRevenueSimulatedTime: async ( + totalAmounts: string, + exchangePricesAndConfig: string, + liquidityTokenBalance: string | BigNumber, + timestamp: string | number + ) => { + if (!address) { + return 0; + } + + return await api.call({ + target: address, + abi: abi.calcRevenueSimulatedTime, + params: [ + totalAmounts, + exchangePricesAndConfig, + liquidityTokenBalance as string, + timestamp, + ], + }); + }, + getRevenue: async (token: string) => { + if (!address) { + return 0; + } + + return await api.call({ + target: address, + abi: abi.getRevenue, + params: [token], + }); + }, + }; }; -// up until block 19662786, must use historical resolver as new one had not been deployed yet -const vaultResolverExistAfterTimestamp = 1708931052; // vault resolver related revenue only exists after this timestamp. revenue / fees before are negligible -const vaultResolverExistAfterBlock = 19313700; // vault resolver related revenue only exists after this timestamp. revenue / fees before are negligible -const vaultResolverHistoricalBlock = 19662786; -const fluidVaultResolverHistorical = - "0x8DD65DaDb217f73A94Efb903EB2dc7B49D97ECca"; -const fluidVaultResolver = "0x93CAB6529aD849b2583EBAe32D13817A2F38cEb4"; -const fluidVaultResolverAbi = { - getAllVaultsAddresses: - "function getAllVaultsAddresses() external view returns (address[] vaults_)", - getVaultEntireData: - "function getVaultEntireData(address vault_) view returns ((address vault, (address liquidity, address factory, address adminImplementation, address secondaryImplementation, address supplyToken, address borrowToken, uint8 supplyDecimals, uint8 borrowDecimals, uint256 vaultId, bytes32 liquiditySupplyExchangePriceSlot, bytes32 liquidityBorrowExchangePriceSlot, bytes32 liquidityUserSupplySlot, bytes32 liquidityUserBorrowSlot) constantVariables, (uint16 supplyRateMagnifier, uint16 borrowRateMagnifier, uint16 collateralFactor, uint16 liquidationThreshold, uint16 liquidationMaxLimit, uint16 withdrawalGap, uint16 liquidationPenalty, uint16 borrowFee, address oracle, uint256 oraclePrice, address rebalancer) configs, (uint256 lastStoredLiquiditySupplyExchangePrice, uint256 lastStoredLiquidityBorrowExchangePrice, uint256 lastStoredVaultSupplyExchangePrice, uint256 lastStoredVaultBorrowExchangePrice, uint256 liquiditySupplyExchangePrice, uint256 liquidityBorrowExchangePrice, uint256 vaultSupplyExchangePrice, uint256 vaultBorrowExchangePrice, uint256 supplyRateVault, uint256 borrowRateVault, uint256 supplyRateLiquidity, uint256 borrowRateLiquidity, uint256 rewardsRate) exchangePricesAndRates, (uint256 totalSupplyVault, uint256 totalBorrowVault, uint256 totalSupplyLiquidity, uint256 totalBorrowLiquidity, uint256 absorbedSupply, uint256 absorbedBorrow) totalSupplyAndBorrow, (uint256 withdrawLimit, uint256 withdrawableUntilLimit, uint256 withdrawable, uint256 borrowLimit, uint256 borrowableUntilLimit, uint256 borrowable, uint256 minimumBorrowing) limitsAndAvailability, (uint256 totalPositions, int256 topTick, uint256 currentBranch, uint256 totalBranch, uint256 totalBorrow, uint256 totalSupply, (uint256 status, int256 minimaTick, uint256 debtFactor, uint256 partials, uint256 debtLiquidity, uint256 baseBranchId, int256 baseBranchMinima) currentBranchState) vaultState, (bool modeWithInterest, uint256 supply, uint256 withdrawalLimit, uint256 lastUpdateTimestamp, uint256 expandPercent, uint256 expandDuration, uint256 baseWithdrawalLimit, uint256 withdrawableUntilLimit, uint256 withdrawable) liquidityUserSupplyData, (bool modeWithInterest, uint256 borrow, uint256 borrowLimit, uint256 lastUpdateTimestamp, uint256 expandPercent, uint256 expandDuration, uint256 baseBorrowLimit, uint256 maxBorrowLimit, uint256 borrowableUntilLimit, uint256 borrowable) liquidityUserBorrowData) vaultData_)", +const liquidityResolver = async (api: sdk.ChainApi) => { + const block = await api.getBlock(); + + let address; + let abi = abis.liquidityResolver; + switch (api.chain) { + case CHAIN.ETHEREUM: + if (block < 19992056) { + address = "0x741c2Cd25f053a55fd94afF1afAEf146523E1249"; + break; + } + address = "0xD7588F6c99605Ab274C211a0AFeC60947668A8Cb"; + break; + case CHAIN.ARBITRUM: + address = "0x46859d33E662d4bF18eEED88f74C36256E606e44"; + break; + } + + return { + listedTokens: async () => { + if (!address) { + return []; + } + + return await api.call({ + target: address, + abi: abi.listedTokens, + params: undefined, + }); + }, + getExchangePricesAndConfig: async (token: string) => { + if (!address) { + return 0; + } + + return await api.call({ + target: address, + abi: abi.getExchangePricesAndConfig, + params: [token], + }); + }, + getTotalAmounts: async (token: string) => { + if (!address) { + return 0; + } + + return await api.call({ + target: address, + abi: abi.getTotalAmounts, + params: [token], + }); + }, + }; }; -const fluidVaultResolverTarget = async (api: sdk.ChainApi) => { - return (await api.getBlock()) > vaultResolverHistoricalBlock - ? fluidVaultResolver - : fluidVaultResolverHistorical; + +const vaultResolver = async (api: sdk.ChainApi) => { + const block = await api.getBlock(); + + let address; + let abi = abis.vaultResolver_after_19992222; + switch (api.chain) { + case CHAIN.ETHEREUM: + if (block < 19313700) { + // vault resolver related revenue only exists after this block. revenue / fees before are negligible + break; + } + + if (block < 19662786) { + address = "0x8DD65DaDb217f73A94Efb903EB2dc7B49D97ECca"; + abi = abis.vaultResolver_before_19992222; + break; + } + if (block < 19992222) { + address = "0x93CAB6529aD849b2583EBAe32D13817A2F38cEb4"; + abi = abis.vaultResolver_before_19992222; + break; + } + address = "0x56ddF84B2c94BF3361862FcEdB704C382dc4cd32"; + break; + case CHAIN.ARBITRUM: + if (block < 228361633) { + // vault resolver related revenue only exists after this block. no revenue / fees before + break; + } + address = "0x77648D39be25a1422467060e11E5b979463bEA3d"; + + break; + } + + return { + getAllVaultsAddresses: async () => { + if (!address) { + return []; + } + + return await api.call({ + target: address, + abi: abi.getAllVaultsAddresses, + params: undefined, + }); + }, + getVaultEntireData: async (vault: string) => { + if (!address) { + return null; + } + + return await api.call({ + target: address, + abi: abi.getVaultEntireData, + params: [vault], + }); + }, + }; }; -const fluidVaultAbi = { - constantsView: - "function constantsView() public view returns((address liquidity,address factory,address adminImplementation,address secondaryImplementation,address supplyToken,address borrowToken,uint8 supplyDecimals,uint8 borrowDecimals,uint vaultId,bytes32 liquiditySupplyExchangePriceSlot,bytes32 liquidityBorrowExchangePriceSlot,bytes32 liquidityUserSupplySlot,bytes32 liquidityUserBorrowSlot))", +const config = { + liquidity: "0x52aa899454998be5b000ad077a46bbe360f4e497", + ethereum: { + dataStartTimestamp: 1708246655, // ~ when liquidity resolver was deployed + + revenueResolverExistAfterBlock: 19959852, + // vault resolver related revenue only exists after this timestamp. revenue / fees before are negligible + vaultResolverExistAfterTimestamp: 1708931052, + vaultResolverExistAfterBlock: 19313700, + }, + arbitrum: { + dataStartTimestamp: 1718020611, // ~ when liquidity resolver was deployed (block 220375236) + + revenueResolverExistAfterBlock: 0, + // vault resolver related revenue only exists after this timestamp. revenue / fees before are negligible + vaultResolverExistAfterTimestamp: 0, + vaultResolverExistAfterBlock: 0, + }, }; const methodologyFluid = { @@ -54,13 +234,19 @@ const methodologyFluid = { Revenue: "Percentage of interest going to treasury", }; -const dataStartTimestamp = 1708246655; // ~ when liquidity resolver was deployed - const fetch: FetchV2 = async ({ api, fromTimestamp, toTimestamp }) => { return { - // totalFees: await getFeesFromTo(api, dataStartTimestamp, toTimestamp), + // totalFees: await getFeesFromTo( + // api, + // config[api.chain].dataStartTimestamp, + // toTimestamp + // ), dailyFees: await getFeesFromTo(api, fromTimestamp, toTimestamp), - // totalRevenue: await getRevenueFromTo(api, dataStartTimestamp, toTimestamp), + // totalRevenue: await getRevenueFromTo( + // api, + // config[api.chain].dataStartTimestamp, + // toTimestamp + // ), dailyRevenue: await getRevenueFromTo(api, fromTimestamp, toTimestamp), }; }; @@ -69,7 +255,14 @@ const adapter: Adapter = { adapter: { [CHAIN.ETHEREUM]: { fetch, - start: dataStartTimestamp, + start: config.ethereum.dataStartTimestamp, + meta: { + methodology: methodologyFluid, + }, + }, + [CHAIN.ARBITRUM]: { + fetch, + start: config.arbitrum.dataStartTimestamp, meta: { methodology: methodologyFluid, }, @@ -87,16 +280,16 @@ const getFeesFromTo = async ( let fromBlock = (await getBlock(api.chain, fromTimestamp)).number; const toBlock = (await getBlock(api.chain, toTimestamp)).number; - if (fromTimestamp < vaultResolverExistAfterTimestamp) { - fromTimestamp = vaultResolverExistAfterTimestamp; - fromBlock = vaultResolverExistAfterBlock; + if (fromTimestamp < config[api.chain].vaultResolverExistAfterTimestamp) { + fromTimestamp = config[api.chain].vaultResolverExistAfterTimestamp; + fromBlock = config[api.chain].vaultResolverExistAfterBlock; } if (fromTimestamp >= toTimestamp) { return 0; } const liquidityOperateLogs = (await sdk.getEventLogs({ - target: fluidLiquidity, + target: config.liquidity, fromBlock, toBlock, chain: api.chain, @@ -113,20 +306,17 @@ const getFeesFromTo = async ( chain: api.chain, block: toBlock, }); - const vaults: string[] = await toApi.call({ - target: await fluidVaultResolverTarget(toApi), - abi: fluidVaultResolverAbi.getAllVaultsAddresses, - }); + const vaults: string[] = await ( + await vaultResolver(toApi) + ).getAllVaultsAddresses(); for await (const vault of vaults) { let borrowBalance = new BigNumber(0); let borrowToken = ""; try { - const { constantVariables, totalSupplyAndBorrow } = await fromApi.call({ - target: await fluidVaultResolverTarget(fromApi), - abi: fluidVaultResolverAbi.getVaultEntireData, - params: [vault], - }); + const { constantVariables, totalSupplyAndBorrow } = await ( + await vaultResolver(fromApi) + ).getVaultEntireData(vault); borrowToken = constantVariables.borrowToken; borrowBalance = new BigNumber(totalSupplyAndBorrow.totalBorrowVault); @@ -137,7 +327,7 @@ const getFeesFromTo = async ( if (!borrowToken) { const { borrowToken: vaultBorrowToken } = await toApi.call({ target: vault, - abi: fluidVaultAbi.constantsView, + abi: abis.vault.constantsView, }); borrowToken = vaultBorrowToken; } @@ -154,13 +344,9 @@ const getFeesFromTo = async ( } try { - const { totalSupplyAndBorrow: totalSupplyAndBorrowTo } = await toApi.call( - { - target: await fluidVaultResolverTarget(toApi), - abi: fluidVaultResolverAbi.getVaultEntireData, - params: [vault], - } - ); + const { totalSupplyAndBorrow: totalSupplyAndBorrowTo } = await ( + await vaultResolver(toApi) + ).getVaultEntireData(vault); toApi.addToken( borrowToken, @@ -193,13 +379,10 @@ const getLiquidityRevenueFromTo = async ( fromTimestamp: number, toTimestamp: number ) => { - const tokens: string[] = await api.call({ - target: fluidLiquidityResolver, - abi: fluidLiquidityResolverAbi.listedTokens, - }); + const tokens: string[] = await (await liquidityResolver(api)).listedTokens(); const collectRevenueLogs: [string, BigNumber][] = (await sdk.getEventLogs({ - target: fluidLiquidity, + target: config.liquidity, fromBlock: (await getBlock(api.chain, fromTimestamp)).number, toBlock: (await getBlock(api.chain, toTimestamp)).number, chain: api.chain, @@ -260,31 +443,28 @@ const getLiquidityUncollectedRevenueAt = async ( // check if token was listed at that timestamp at Liquidity, if not, revenue is 0 if ( !( - (await timestampedApi.call({ - target: fluidLiquidityResolver, - abi: fluidLiquidityResolverAbi.listedTokens, - })) as string[] + (await ( + await liquidityResolver(timestampedApi) + ).listedTokens()) as string[] ).includes(token) ) { return new BigNumber(0); } // get liquidity packed storage slots data at timestamped Api block number - const totalAmounts = await timestampedApi.call({ - target: fluidLiquidityResolver, - abi: fluidLiquidityResolverAbi.getTotalAmounts, - params: [token], - }); - const exchangePricesAndConfig = await timestampedApi.call({ - target: fluidLiquidityResolver, - abi: fluidLiquidityResolverAbi.getExchangePricesAndConfig, - params: [token], - }); + const totalAmounts = await ( + await liquidityResolver(timestampedApi) + ).getTotalAmounts(token); + + const exchangePricesAndConfig = await ( + await liquidityResolver(timestampedApi) + ).getExchangePricesAndConfig(token); + let liquidityTokenBalance: BigNumber | string; if (token.toLowerCase() == "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee") { liquidityTokenBalance = ( await sdk.api.eth.getBalance({ - target: fluidLiquidity, + target: config.liquidity, block: await timestampedApi.getBlock(), }) ).output; @@ -292,26 +472,25 @@ const getLiquidityUncollectedRevenueAt = async ( liquidityTokenBalance = await timestampedApi.call({ target: token, abi: "erc20:balanceOf", - params: [fluidLiquidity], + params: [config.liquidity], }); } // pass data into revenue resolver, available at current api block, which calculates revenue at the // simulated timestamp based on storage slots data - - const uncollectedRevenue = await new sdk.ChainApi({ - chain: api.chain, - block: fluidRevenueResolverExistAfterBlock, - }).call({ - target: fluidRevenueResolver, - abi: fluidRevenueResolverAbi.calcRevenueSimulatedTime, - params: [ - totalAmounts, - exchangePricesAndConfig, - liquidityTokenBalance, - timestamp, - ], - }); + const uncollectedRevenue = await ( + await revenueResolver( + new sdk.ChainApi({ + chain: api.chain, + block: config[api.chain].revenueResolverExistAfterBlock, + }) + ) + )?.calcRevenueSimulatedTime( + totalAmounts, + exchangePricesAndConfig, + liquidityTokenBalance, + timestamp + ); return new BigNumber(uncollectedRevenue); }; @@ -321,7 +500,7 @@ const getVaultsMagnifierRevenueFromTo = async ( fromTimestamp: number, toTimestamp: number ) => { - if (toTimestamp < vaultResolverExistAfterTimestamp) { + if (toTimestamp < config[api.chain].vaultResolverExistAfterTimestamp) { return 0; } @@ -335,10 +514,9 @@ const getVaultsMagnifierRevenueFromTo = async ( chain: api.chain, }); - const vaults: string[] = await toBalancesApi.call({ - target: await fluidVaultResolverTarget(toBalancesApi), - abi: fluidVaultResolverAbi.getAllVaultsAddresses, - }); + const vaults: string[] = await ( + await vaultResolver(toBalancesApi) + ).getAllVaultsAddresses(); for await (const vault of vaults) { fromBalancesApi = await getVaultMagnifierUncollectedRevenueAt( @@ -405,7 +583,7 @@ const getVaultMagnifierCollectedRevenueFromTo = async ( // get collateral and borrow token of the vault const { supplyToken, borrowToken } = await api.call({ target: vault, - abi: fluidVaultAbi.constantsView, + abi: abis.vault.constantsView, }); for await (const log of rebalanceEventLogs) { @@ -428,7 +606,7 @@ const getVaultMagnifierUncollectedRevenueAt = async ( vault: string, balancesApi: sdk.ChainApi ) => { - if (timestamp < vaultResolverExistAfterTimestamp) { + if (timestamp < config[api.chain].vaultResolverExistAfterTimestamp) { // vault resolver related revenue only exists after this timestamp. before this there has been no such revenue. return balancesApi; } @@ -441,12 +619,9 @@ const getVaultMagnifierUncollectedRevenueAt = async ( }); try { - const { totalSupplyAndBorrow, constantVariables } = - await timestampedApi.call({ - target: await fluidVaultResolverTarget(timestampedApi), - abi: fluidVaultResolverAbi.getVaultEntireData, - params: [vault], - }); + const { totalSupplyAndBorrow, constantVariables } = await ( + await vaultResolver(timestampedApi) + ).getVaultEntireData(vault); const totalSupplyVault = new BigNumber( totalSupplyAndBorrow.totalSupplyVault From ed9615789c9e215d7c41b501962510053e6314fe Mon Sep 17 00:00:00 2001 From: bergben Date: Wed, 3 Jul 2024 17:12:27 +0200 Subject: [PATCH 002/105] feat(fluid): simplify arbitrum config --- fees/fluid/index.ts | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/fees/fluid/index.ts b/fees/fluid/index.ts index 087bed196c..605a175326 100644 --- a/fees/fluid/index.ts +++ b/fees/fluid/index.ts @@ -174,12 +174,7 @@ const vaultResolver = async (api: sdk.ChainApi) => { address = "0x56ddF84B2c94BF3361862FcEdB704C382dc4cd32"; break; case CHAIN.ARBITRUM: - if (block < 228361633) { - // vault resolver related revenue only exists after this block. no revenue / fees before - break; - } address = "0x77648D39be25a1422467060e11E5b979463bEA3d"; - break; } @@ -220,12 +215,12 @@ const config = { vaultResolverExistAfterBlock: 19313700, }, arbitrum: { - dataStartTimestamp: 1718020611, // ~ when liquidity resolver was deployed (block 220375236) + dataStartTimestamp: 1720018638, // ~ before any activity started (block 228361633) - revenueResolverExistAfterBlock: 0, + revenueResolverExistAfterBlock: 228361632, // vault resolver related revenue only exists after this timestamp. revenue / fees before are negligible - vaultResolverExistAfterTimestamp: 0, - vaultResolverExistAfterBlock: 0, + vaultResolverExistAfterTimestamp: 1720018637, + vaultResolverExistAfterBlock: 228361632, }, }; From 697313d25cee5a39fe8fd1324f921cf425f69bee Mon Sep 17 00:00:00 2001 From: htanh9320 Date: Mon, 8 Jul 2024 14:14:30 +0700 Subject: [PATCH 003/105] 7k aggregator volume statistic --- aggregators/7k-aggregator/index.ts | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 aggregators/7k-aggregator/index.ts diff --git a/aggregators/7k-aggregator/index.ts b/aggregators/7k-aggregator/index.ts new file mode 100644 index 0000000000..c71270691f --- /dev/null +++ b/aggregators/7k-aggregator/index.ts @@ -0,0 +1,27 @@ +import fetchURL from '../../utils/fetchURL'; +import { FetchResult, SimpleAdapter } from '../../adapters/types'; +import { CHAIN } from '../../helpers/chains'; + +const URL = 'https://statistic.7k.ag'; + +const fetch = async (timestamp: number): Promise => { + const dailyVolume = await fetchURL( + `${URL}/daily-volume-with-ts?timestamp=${timestamp}`, + ); + + return { + dailyVolume, + timestamp, + }; +}; + +const adapter: SimpleAdapter = { + adapter: { + [CHAIN.SUI]: { + fetch, + start: 1719563120, + }, + }, +}; + +export default adapter; From 2c1fcc5602e5fadef089ced32e63e4d92824d486 Mon Sep 17 00:00:00 2001 From: htanh9320 Date: Mon, 8 Jul 2024 21:00:59 +0700 Subject: [PATCH 004/105] add adaptoer version --- aggregators/7k-aggregator/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/aggregators/7k-aggregator/index.ts b/aggregators/7k-aggregator/index.ts index c71270691f..2051cbabc3 100644 --- a/aggregators/7k-aggregator/index.ts +++ b/aggregators/7k-aggregator/index.ts @@ -16,6 +16,7 @@ const fetch = async (timestamp: number): Promise => { }; const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.SUI]: { fetch, From 2f367c5ebaca2fc7c8803e03c88a890273451cb6 Mon Sep 17 00:00:00 2001 From: htanh9320 Date: Mon, 8 Jul 2024 21:45:46 +0700 Subject: [PATCH 005/105] get dailyvolume with version 2 --- aggregators/7k-aggregator/index.ts | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/aggregators/7k-aggregator/index.ts b/aggregators/7k-aggregator/index.ts index 2051cbabc3..cc4447938f 100644 --- a/aggregators/7k-aggregator/index.ts +++ b/aggregators/7k-aggregator/index.ts @@ -1,18 +1,14 @@ import fetchURL from '../../utils/fetchURL'; -import { FetchResult, SimpleAdapter } from '../../adapters/types'; +import { FetchV2, SimpleAdapter } from '../../adapters/types'; import { CHAIN } from '../../helpers/chains'; const URL = 'https://statistic.7k.ag'; -const fetch = async (timestamp: number): Promise => { +const fetch: FetchV2 = async ({ fromTimestamp, toTimestamp }) => { const dailyVolume = await fetchURL( - `${URL}/daily-volume-with-ts?timestamp=${timestamp}`, + `${URL}/volume-with-ts?from_timestamp=${fromTimestamp}&to_timestamp=${toTimestamp}`, ); - - return { - dailyVolume, - timestamp, - }; + return { dailyVolume }; }; const adapter: SimpleAdapter = { From 9c1ac653e277c280d1424919c7099a177882ad4e Mon Sep 17 00:00:00 2001 From: Tiago Silva Date: Mon, 8 Jul 2024 15:46:28 +0100 Subject: [PATCH 006/105] feat: add carbondefi volume and fees adapter - Add adapter metadata (hallmarks and methodology) and getData function for Sei and Ethereum - Add CarbonDeFi dimension sums for all tokens when usd prices are available by the endpoint - Add CarbonDeFi dimensions sums per token when usd prices are not available --- dexs/carbondefi/index.ts | 82 +++++++++++++++++++++++++++++++++ dexs/carbondefi/types.ts | 13 ++++++ dexs/carbondefi/utils.ts | 97 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 192 insertions(+) create mode 100644 dexs/carbondefi/index.ts create mode 100644 dexs/carbondefi/types.ts create mode 100644 dexs/carbondefi/utils.ts diff --git a/dexs/carbondefi/index.ts b/dexs/carbondefi/index.ts new file mode 100644 index 0000000000..1458d9779f --- /dev/null +++ b/dexs/carbondefi/index.ts @@ -0,0 +1,82 @@ +import { FetchOptions, IJSON, SimpleAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import fetchURL from "../../utils/fetchURL"; +import { CarbonAnalyticsResponse } from "./types"; +import { + getEmptyData, + getDimensionsSum, + getDimensionsSumByToken, +} from "./utils"; + +const CARBON_METADATA: { + methodology: IJSON; + hallmarks: [number, string][]; +} = { + hallmarks: [ + [1681986059, "CarbonDeFi Ethereum Launch"], + [1716825673, "CarbonDeFi Sei Launch"], + ], + methodology: { + Volume: + "Volume is calculated as the sum of the targetAmount tokens from TokensTraded events emitted by the CarbonController contract.", + Fees: "Fees are calculated as the sum of the tradingFeeAmount amount for the sourceToken if tradeByTarget is true or the targetToken if tradeByTarget is false, taken from TokensTraded events emitted by the CarbonController contract.", + }, +}; + +const chainInfo: { [key: string]: any } = { + [CHAIN.ETHEREUM]: { + endpoint: "https://api.carbondefi.xyz/v1/analytics/volume", + startBlock: 17087375, + startTimestamp: 1681986059, + getVolumeByToken: false, + }, + [CHAIN.SEI]: { + endpoint: "https://sei-api.carbondefi.xyz/v1/analytics/volume", + startBlock: 79146720, + startTimestamp: 1716825673, + getVolumeByToken: true, + }, +}; + +const getData = async (options: FetchOptions) => { + const analyticsEndpoint = chainInfo[options.chain].endpoint; + const getVolumeByToken = chainInfo[options.chain].getVolumeByToken; + const startTimestamp = options.startOfDay; + const endTimestamp = options.toTimestamp; + + try { + const swapData: CarbonAnalyticsResponse = await fetchURL(analyticsEndpoint); + + if (getVolumeByToken) { + const volumeSumByToken = getDimensionsSumByToken( + swapData, + startTimestamp, + endTimestamp, + getEmptyData(options) + ); + return volumeSumByToken; + } + return getDimensionsSum(swapData, startTimestamp, endTimestamp); + } catch (e) { + console.error(e); + // Return empty values + return getEmptyData(options); + } +}; + +const adapter: SimpleAdapter = { + version: 2, + adapter: { + [CHAIN.ETHEREUM]: { + fetch: getData, + start: chainInfo[CHAIN.ETHEREUM].startTimestamp, + meta: CARBON_METADATA, + }, + [CHAIN.SEI]: { + fetch: getData, + start: chainInfo[CHAIN.SEI].startTimestamp, + meta: CARBON_METADATA, + }, + }, +}; +export default adapter; diff --git a/dexs/carbondefi/types.ts b/dexs/carbondefi/types.ts new file mode 100644 index 0000000000..cd40d205ee --- /dev/null +++ b/dexs/carbondefi/types.ts @@ -0,0 +1,13 @@ +interface CarbonAnalyticsItem { + timestamp: string; + feesymbol: string; + feeaddress: string; + tradingfeeamount_real: number; + tradingfeeamount_usd: number; + targetsymbol: string; + targetaddress: string; + targetamount_real: number; + targetamount_usd: number; +} + +export interface CarbonAnalyticsResponse extends Array {} diff --git a/dexs/carbondefi/utils.ts b/dexs/carbondefi/utils.ts new file mode 100644 index 0000000000..f5c3bf2b55 --- /dev/null +++ b/dexs/carbondefi/utils.ts @@ -0,0 +1,97 @@ +import { Balances } from "@defillama/sdk"; +import { CarbonAnalyticsResponse } from "./types"; +import { FetchOptions } from "../../adapters/types"; + +const filterDataByDate = ( + swapData: CarbonAnalyticsResponse, + startTimestampS: number, + endTimestampS: number +) => { + const startTimestampMs = startTimestampS * 1000; + const endTimestampMs = endTimestampS * 1000; + + return swapData.filter((swap) => { + const swapTsMs = Date.parse(swap.timestamp); + return swapTsMs >= startTimestampMs && swapTsMs <= endTimestampMs; + }); +}; + +export const getDimensionsSum = ( + swapData: CarbonAnalyticsResponse, + startTimestamp: number, + endTimestamp: number +) => { + const dailyData = filterDataByDate(swapData, startTimestamp, endTimestamp); + + const { dailyVolume, dailyFees } = dailyData.reduce( + (prev, curr) => { + return { + dailyVolume: prev.dailyVolume + curr.targetamount_usd, + dailyFees: prev.dailyFees + curr.tradingfeeamount_usd, + }; + }, + { + dailyVolume: 0, + dailyFees: 0, + } + ); + const { totalVolume, totalFees } = swapData.reduce( + (prev, curr) => { + return { + totalVolume: prev.totalVolume + curr.targetamount_usd, + totalFees: prev.totalFees + curr.tradingfeeamount_usd, + }; + }, + { + totalVolume: 0, + totalFees: 0, + } + ); + return { + dailyVolume, + totalVolume, + dailyFees, + totalFees, + }; +}; + +export const getDimensionsSumByToken = ( + swapData: CarbonAnalyticsResponse, + startTimestamp: number, + endTimestamp: number, + emptyData: { + dailyVolume: Balances; + dailyFees: Balances; + totalVolume: Balances; + totalFees: Balances; + } +) => { + const dailyData = filterDataByDate(swapData, startTimestamp, endTimestamp); + const { dailyVolume, dailyFees, totalFees, totalVolume } = emptyData; + + swapData.forEach((swap) => { + totalVolume.add(swap.targetaddress, swap.targetamount_real); + totalFees.add(swap.feeaddress, swap.tradingfeeamount_real); + }); + + dailyData.forEach((swap) => { + dailyVolume.add(swap.targetaddress, swap.targetamount_real); + dailyFees.add(swap.feeaddress, swap.tradingfeeamount_real); + }); + + return { + dailyVolume, + dailyFees, + totalVolume, + totalFees, + }; +}; + +export const getEmptyData = (options: FetchOptions) => { + return { + dailyVolume: options.createBalances(), + dailyFees: options.createBalances(), + totalVolume: options.createBalances(), + totalFees: options.createBalances(), + }; +}; From a1d5b2f87bc8b4ceede960a04754db45f31db480 Mon Sep 17 00:00:00 2001 From: Tiago Silva Date: Mon, 8 Jul 2024 15:58:04 +0100 Subject: [PATCH 007/105] refactor: Rename and clean-up getData - Rename getVolumeByToken to getDimensionsByToken - Return earlier from getDimensionsSumByToken --- dexs/carbondefi/index.ts | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/dexs/carbondefi/index.ts b/dexs/carbondefi/index.ts index 1458d9779f..398ab895c3 100644 --- a/dexs/carbondefi/index.ts +++ b/dexs/carbondefi/index.ts @@ -28,33 +28,32 @@ const chainInfo: { [key: string]: any } = { endpoint: "https://api.carbondefi.xyz/v1/analytics/volume", startBlock: 17087375, startTimestamp: 1681986059, - getVolumeByToken: false, + getDimensionsByToken: false, }, [CHAIN.SEI]: { endpoint: "https://sei-api.carbondefi.xyz/v1/analytics/volume", startBlock: 79146720, startTimestamp: 1716825673, - getVolumeByToken: true, + getDimensionsByToken: true, }, }; const getData = async (options: FetchOptions) => { const analyticsEndpoint = chainInfo[options.chain].endpoint; - const getVolumeByToken = chainInfo[options.chain].getVolumeByToken; + const getDimensionsByToken = chainInfo[options.chain].getDimensionsByToken; const startTimestamp = options.startOfDay; const endTimestamp = options.toTimestamp; try { const swapData: CarbonAnalyticsResponse = await fetchURL(analyticsEndpoint); - if (getVolumeByToken) { - const volumeSumByToken = getDimensionsSumByToken( + if (getDimensionsByToken) { + return getDimensionsSumByToken( swapData, startTimestamp, endTimestamp, getEmptyData(options) ); - return volumeSumByToken; } return getDimensionsSum(swapData, startTimestamp, endTimestamp); } catch (e) { From 825aa1dfbcc4a14da91a25c37b42389374419541 Mon Sep 17 00:00:00 2001 From: panora-exchange <142600393+panora-exchange@users.noreply.github.com> Date: Wed, 10 Jul 2024 16:31:41 +0530 Subject: [PATCH 008/105] fix: DefiLlama stats for panora --- aggregators/swapgpt/index.ts | 61 +++++++++++++++++++++++------------- 1 file changed, 40 insertions(+), 21 deletions(-) diff --git a/aggregators/swapgpt/index.ts b/aggregators/swapgpt/index.ts index 9bbb9f594c..115321d63a 100644 --- a/aggregators/swapgpt/index.ts +++ b/aggregators/swapgpt/index.ts @@ -1,42 +1,61 @@ -import fetchURL from "../../utils/fetchURL" +import fetchURL from "../../utils/fetchURL"; import { SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; - - interface IVolumeall { - grouptimestamp: string; - amount: string; + startDateTime: string; + dailyVolumeUSD: string; } -const baseUrl = "https://stats.panora.exchange"; -const endpoint = "stats/getDefiLamaStats"; +const baseUrl = "https://stats-api.panora.exchange"; +const endpoint = "getDefiLlamaStats"; + +const getStartOfDay = (timestamp: number) => { + const now = new Date(timestamp); + const startOfDayUTC = new Date( + Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate()) + ); + + const startOfDayISO = startOfDayUTC.toISOString(); + + return startOfDayISO; +}; const fetch = async (timestamp: number) => { - const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)) - const historicalVolume: IVolumeall[] = (await fetchURL(`${baseUrl}/${endpoint}`))?.volumeInUsd - const totalVolume = historicalVolume - .filter(volItem => (new Date(volItem.grouptimestamp).getTime() / 1000) <= dayTimestamp) - .reduce((acc, { amount }) => acc + Number(amount), 0) + const dayTimestamp = getStartOfDay(timestamp); - const dailyVolume = historicalVolume - .find(dayItem => (new Date(dayItem.grouptimestamp).getTime() / 1000) === dayTimestamp)?.amount + const historicalVolume: IVolumeall[] = ( + await fetchURL(`${baseUrl}/${endpoint}`) + )?.dailyVolumeUSD; + + const totalVolume = historicalVolume + .filter( + (volItem) => + new Date(volItem.startDateTime)?.getTime() <= + new Date(dayTimestamp)?.getTime() + ) + .reduce((acc, { dailyVolumeUSD }) => acc + Number(dailyVolumeUSD), 0); + + const dailyVolume = historicalVolume.find( + (dayItem) => + new Date(dayItem.startDateTime)?.getTime() === + new Date(dayTimestamp)?.getTime() + )?.dailyVolumeUSD; return { - totalVolume: `${totalVolume}`, - dailyVolume: dailyVolume ? `${dailyVolume}` : undefined, - timestamp: dayTimestamp, + totalVolume: String(totalVolume), + dailyVolume, + timestamp: new Date(dayTimestamp)?.getTime() / 1000, }; }; const adapter: SimpleAdapter = { adapter: { [CHAIN.APTOS]: { - fetch: fetch, - start: (new Date('2023-11-28T00:00:00.000Z').getTime() / 1000), - } + fetch, + start: new Date("2023-11-28T00:00:00.000Z").getTime() / 1000, + }, }, }; From 33f53c678b8484e0ecaadae318ff3e51f04fe825 Mon Sep 17 00:00:00 2001 From: degencreator <156078277+degencreator@users.noreply.github.com> Date: Wed, 10 Jul 2024 15:54:38 +0200 Subject: [PATCH 009/105] intentx: Updated subgraph endpoint --- dexs/intent-x/index.tsx | 8 +- fees/intent-x/index.tsx | 4 +- yarn.lock | 2440 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 2446 insertions(+), 6 deletions(-) create mode 100644 yarn.lock diff --git a/dexs/intent-x/index.tsx b/dexs/intent-x/index.tsx index 030070c964..08119f1edb 100644 --- a/dexs/intent-x/index.tsx +++ b/dexs/intent-x/index.tsx @@ -7,9 +7,9 @@ import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume const ONE_DAY_IN_SECONDS = 60 * 60 * 24; const endpoint_0_8_0 = - "https://api.thegraph.com/subgraphs/name/intent-x/perpetuals-analytics_base"; + "https://api.studio.thegraph.com/query/62472/perpetuals-analytics_base/version/latest"; const endpoint = - "https://api.studio.thegraph.com/query/62472/intentx-analytics_082/version/latest"; + "https://api.0xgraph.xyz/subgraphs/name/intentx-base-analytcs-082"; const endpoint_blast = "https://api.studio.thegraph.com/query/62472/intentx-analytics_082_blast/version/latest"; const endpoint_mantle = @@ -201,8 +201,8 @@ const fetchVolumeBlast = async ( totalVolume = totalVolume.plus(new BigNumber(data.tradeVolume)); }); - dailyVolume = dailyVolume.dividedBy(new BigNumber(1e18)); - totalVolume = totalVolume.dividedBy(new BigNumber(1e18)); + dailyVolume = dailyVolume.dividedBy(new BigNumber(1e18)).multipliedBy(2); + totalVolume = totalVolume.dividedBy(new BigNumber(1e18)).multipliedBy(2); const _dailyVolume = toString(dailyVolume); const _totalVolume = toString(totalVolume); diff --git a/fees/intent-x/index.tsx b/fees/intent-x/index.tsx index 004a098b1e..554a05374f 100644 --- a/fees/intent-x/index.tsx +++ b/fees/intent-x/index.tsx @@ -4,9 +4,9 @@ import { FetchOptions, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; const endpoint_0_8_0 = - "https://api.thegraph.com/subgraphs/name/intent-x/perpetuals-analytics_base"; + "https://api.studio.thegraph.com/query/62472/perpetuals-analytics_base/version/latest"; const endpoint = - "https://api.studio.thegraph.com/query/62472/intentx-analytics_082/version/latest"; + "https://api.0xgraph.xyz/subgraphs/name/intentx-base-analytcs-082"; const endpoint_blast = "https://api.studio.thegraph.com/query/62472/intentx-analytics_082_blast/version/latest"; const endpoint_mantle = diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000000..b2f9b21617 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,2440 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@adraffy/ens-normalize@1.10.1": + version "1.10.1" + resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz#63430d04bd8c5e74f8d7d049338f1cd9d4f02069" + integrity sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw== + +"@aws-crypto/crc32@5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/crc32/-/crc32-5.2.0.tgz#cfcc22570949c98c6689cfcbd2d693d36cdae2e1" + integrity sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg== + dependencies: + "@aws-crypto/util" "^5.2.0" + "@aws-sdk/types" "^3.222.0" + tslib "^2.6.2" + +"@aws-crypto/crc32c@5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/crc32c/-/crc32c-5.2.0.tgz#4e34aab7f419307821509a98b9b08e84e0c1917e" + integrity sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag== + dependencies: + "@aws-crypto/util" "^5.2.0" + "@aws-sdk/types" "^3.222.0" + tslib "^2.6.2" + +"@aws-crypto/sha1-browser@5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha1-browser/-/sha1-browser-5.2.0.tgz#b0ee2d2821d3861f017e965ef3b4cb38e3b6a0f4" + integrity sha512-OH6lveCFfcDjX4dbAvCFSYUjJZjDr/3XJ3xHtjn3Oj5b9RjojQo8npoLeA/bNwkOkrSQ0wgrHzXk4tDRxGKJeg== + dependencies: + "@aws-crypto/supports-web-crypto" "^5.2.0" + "@aws-crypto/util" "^5.2.0" + "@aws-sdk/types" "^3.222.0" + "@aws-sdk/util-locate-window" "^3.0.0" + "@smithy/util-utf8" "^2.0.0" + tslib "^2.6.2" + +"@aws-crypto/sha256-browser@5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz#153895ef1dba6f9fce38af550e0ef58988eb649e" + integrity sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw== + dependencies: + "@aws-crypto/sha256-js" "^5.2.0" + "@aws-crypto/supports-web-crypto" "^5.2.0" + "@aws-crypto/util" "^5.2.0" + "@aws-sdk/types" "^3.222.0" + "@aws-sdk/util-locate-window" "^3.0.0" + "@smithy/util-utf8" "^2.0.0" + tslib "^2.6.2" + +"@aws-crypto/sha256-js@5.2.0", "@aws-crypto/sha256-js@^5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz#c4fdb773fdbed9a664fc1a95724e206cf3860042" + integrity sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA== + dependencies: + "@aws-crypto/util" "^5.2.0" + "@aws-sdk/types" "^3.222.0" + tslib "^2.6.2" + +"@aws-crypto/supports-web-crypto@^5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz#a1e399af29269be08e695109aa15da0a07b5b5fb" + integrity sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg== + dependencies: + tslib "^2.6.2" + +"@aws-crypto/util@^5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/util/-/util-5.2.0.tgz#71284c9cffe7927ddadac793c14f14886d3876da" + integrity sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ== + dependencies: + "@aws-sdk/types" "^3.222.0" + "@smithy/util-utf8" "^2.0.0" + tslib "^2.6.2" + +"@aws-sdk/client-s3@^3.400.0": + version "3.613.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.613.0.tgz#780731af58c67f61aadb86a86f8896e0f3465973" + integrity sha512-JK0yjzZFa+/qVZawHasCG4yEEA7ITpBtNsn9ri7qUZDfSWxDDJpKgHI/ZWd4QXw3SLlBG9hoj+eNSroJXuv+hQ== + dependencies: + "@aws-crypto/sha1-browser" "5.2.0" + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/client-sso-oidc" "3.613.0" + "@aws-sdk/client-sts" "3.613.0" + "@aws-sdk/core" "3.609.0" + "@aws-sdk/credential-provider-node" "3.613.0" + "@aws-sdk/middleware-bucket-endpoint" "3.609.0" + "@aws-sdk/middleware-expect-continue" "3.609.0" + "@aws-sdk/middleware-flexible-checksums" "3.609.0" + "@aws-sdk/middleware-host-header" "3.609.0" + "@aws-sdk/middleware-location-constraint" "3.609.0" + "@aws-sdk/middleware-logger" "3.609.0" + "@aws-sdk/middleware-recursion-detection" "3.609.0" + "@aws-sdk/middleware-sdk-s3" "3.609.0" + "@aws-sdk/middleware-signing" "3.609.0" + "@aws-sdk/middleware-ssec" "3.609.0" + "@aws-sdk/middleware-user-agent" "3.609.0" + "@aws-sdk/region-config-resolver" "3.609.0" + "@aws-sdk/signature-v4-multi-region" "3.609.0" + "@aws-sdk/types" "3.609.0" + "@aws-sdk/util-endpoints" "3.609.0" + "@aws-sdk/util-user-agent-browser" "3.609.0" + "@aws-sdk/util-user-agent-node" "3.609.0" + "@aws-sdk/xml-builder" "3.609.0" + "@smithy/config-resolver" "^3.0.4" + "@smithy/core" "^2.2.4" + "@smithy/eventstream-serde-browser" "^3.0.4" + "@smithy/eventstream-serde-config-resolver" "^3.0.3" + "@smithy/eventstream-serde-node" "^3.0.4" + "@smithy/fetch-http-handler" "^3.2.0" + "@smithy/hash-blob-browser" "^3.1.2" + "@smithy/hash-node" "^3.0.3" + "@smithy/hash-stream-node" "^3.1.2" + "@smithy/invalid-dependency" "^3.0.3" + "@smithy/md5-js" "^3.0.3" + "@smithy/middleware-content-length" "^3.0.3" + "@smithy/middleware-endpoint" "^3.0.4" + "@smithy/middleware-retry" "^3.0.7" + "@smithy/middleware-serde" "^3.0.3" + "@smithy/middleware-stack" "^3.0.3" + "@smithy/node-config-provider" "^3.1.3" + "@smithy/node-http-handler" "^3.1.1" + "@smithy/protocol-http" "^4.0.3" + "@smithy/smithy-client" "^3.1.5" + "@smithy/types" "^3.3.0" + "@smithy/url-parser" "^3.0.3" + "@smithy/util-base64" "^3.0.0" + "@smithy/util-body-length-browser" "^3.0.0" + "@smithy/util-body-length-node" "^3.0.0" + "@smithy/util-defaults-mode-browser" "^3.0.7" + "@smithy/util-defaults-mode-node" "^3.0.7" + "@smithy/util-endpoints" "^2.0.4" + "@smithy/util-retry" "^3.0.3" + "@smithy/util-stream" "^3.0.5" + "@smithy/util-utf8" "^3.0.0" + "@smithy/util-waiter" "^3.1.2" + tslib "^2.6.2" + +"@aws-sdk/client-sso-oidc@3.613.0": + version "3.613.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.613.0.tgz#1c98f0fb1254692a9884534aa73c74cff04034e5" + integrity sha512-VINgHA30f6Itjtj6ZAxkx86XhyFYa7UBfv2Ju+9QGcAr2Y3HU+Mh9g6QaTwDqIM5QG6Pgss24NaAItWGJHFf5A== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "3.609.0" + "@aws-sdk/credential-provider-node" "3.613.0" + "@aws-sdk/middleware-host-header" "3.609.0" + "@aws-sdk/middleware-logger" "3.609.0" + "@aws-sdk/middleware-recursion-detection" "3.609.0" + "@aws-sdk/middleware-user-agent" "3.609.0" + "@aws-sdk/region-config-resolver" "3.609.0" + "@aws-sdk/types" "3.609.0" + "@aws-sdk/util-endpoints" "3.609.0" + "@aws-sdk/util-user-agent-browser" "3.609.0" + "@aws-sdk/util-user-agent-node" "3.609.0" + "@smithy/config-resolver" "^3.0.4" + "@smithy/core" "^2.2.4" + "@smithy/fetch-http-handler" "^3.2.0" + "@smithy/hash-node" "^3.0.3" + "@smithy/invalid-dependency" "^3.0.3" + "@smithy/middleware-content-length" "^3.0.3" + "@smithy/middleware-endpoint" "^3.0.4" + "@smithy/middleware-retry" "^3.0.7" + "@smithy/middleware-serde" "^3.0.3" + "@smithy/middleware-stack" "^3.0.3" + "@smithy/node-config-provider" "^3.1.3" + "@smithy/node-http-handler" "^3.1.1" + "@smithy/protocol-http" "^4.0.3" + "@smithy/smithy-client" "^3.1.5" + "@smithy/types" "^3.3.0" + "@smithy/url-parser" "^3.0.3" + "@smithy/util-base64" "^3.0.0" + "@smithy/util-body-length-browser" "^3.0.0" + "@smithy/util-body-length-node" "^3.0.0" + "@smithy/util-defaults-mode-browser" "^3.0.7" + "@smithy/util-defaults-mode-node" "^3.0.7" + "@smithy/util-endpoints" "^2.0.4" + "@smithy/util-middleware" "^3.0.3" + "@smithy/util-retry" "^3.0.3" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@aws-sdk/client-sso@3.609.0": + version "3.609.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.609.0.tgz#2a99166694b64947ba5b7453f057772bd3bba5b8" + integrity sha512-gqXGFDkIpKHCKAbeJK4aIDt3tiwJ26Rf5Tqw9JS6BYXsdMeOB8FTzqD9R+Yc1epHd8s5L94sdqXT5PapgxFZrg== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "3.609.0" + "@aws-sdk/middleware-host-header" "3.609.0" + "@aws-sdk/middleware-logger" "3.609.0" + "@aws-sdk/middleware-recursion-detection" "3.609.0" + "@aws-sdk/middleware-user-agent" "3.609.0" + "@aws-sdk/region-config-resolver" "3.609.0" + "@aws-sdk/types" "3.609.0" + "@aws-sdk/util-endpoints" "3.609.0" + "@aws-sdk/util-user-agent-browser" "3.609.0" + "@aws-sdk/util-user-agent-node" "3.609.0" + "@smithy/config-resolver" "^3.0.4" + "@smithy/core" "^2.2.4" + "@smithy/fetch-http-handler" "^3.2.0" + "@smithy/hash-node" "^3.0.3" + "@smithy/invalid-dependency" "^3.0.3" + "@smithy/middleware-content-length" "^3.0.3" + "@smithy/middleware-endpoint" "^3.0.4" + "@smithy/middleware-retry" "^3.0.7" + "@smithy/middleware-serde" "^3.0.3" + "@smithy/middleware-stack" "^3.0.3" + "@smithy/node-config-provider" "^3.1.3" + "@smithy/node-http-handler" "^3.1.1" + "@smithy/protocol-http" "^4.0.3" + "@smithy/smithy-client" "^3.1.5" + "@smithy/types" "^3.3.0" + "@smithy/url-parser" "^3.0.3" + "@smithy/util-base64" "^3.0.0" + "@smithy/util-body-length-browser" "^3.0.0" + "@smithy/util-body-length-node" "^3.0.0" + "@smithy/util-defaults-mode-browser" "^3.0.7" + "@smithy/util-defaults-mode-node" "^3.0.7" + "@smithy/util-endpoints" "^2.0.4" + "@smithy/util-middleware" "^3.0.3" + "@smithy/util-retry" "^3.0.3" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@aws-sdk/client-sts@3.613.0": + version "3.613.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.613.0.tgz#b648592d79dba0d4badaeacb4f33b3a2b158d0ca" + integrity sha512-S+KvQI4XEivY3vyIY+IPY7Fw8vFvX/q3pkNC9qEhnAs+/w7vT6vhVBHsaugYVlsMuNtNvmyc8P+Q/gzOEtLCTw== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/client-sso-oidc" "3.613.0" + "@aws-sdk/core" "3.609.0" + "@aws-sdk/credential-provider-node" "3.613.0" + "@aws-sdk/middleware-host-header" "3.609.0" + "@aws-sdk/middleware-logger" "3.609.0" + "@aws-sdk/middleware-recursion-detection" "3.609.0" + "@aws-sdk/middleware-user-agent" "3.609.0" + "@aws-sdk/region-config-resolver" "3.609.0" + "@aws-sdk/types" "3.609.0" + "@aws-sdk/util-endpoints" "3.609.0" + "@aws-sdk/util-user-agent-browser" "3.609.0" + "@aws-sdk/util-user-agent-node" "3.609.0" + "@smithy/config-resolver" "^3.0.4" + "@smithy/core" "^2.2.4" + "@smithy/fetch-http-handler" "^3.2.0" + "@smithy/hash-node" "^3.0.3" + "@smithy/invalid-dependency" "^3.0.3" + "@smithy/middleware-content-length" "^3.0.3" + "@smithy/middleware-endpoint" "^3.0.4" + "@smithy/middleware-retry" "^3.0.7" + "@smithy/middleware-serde" "^3.0.3" + "@smithy/middleware-stack" "^3.0.3" + "@smithy/node-config-provider" "^3.1.3" + "@smithy/node-http-handler" "^3.1.1" + "@smithy/protocol-http" "^4.0.3" + "@smithy/smithy-client" "^3.1.5" + "@smithy/types" "^3.3.0" + "@smithy/url-parser" "^3.0.3" + "@smithy/util-base64" "^3.0.0" + "@smithy/util-body-length-browser" "^3.0.0" + "@smithy/util-body-length-node" "^3.0.0" + "@smithy/util-defaults-mode-browser" "^3.0.7" + "@smithy/util-defaults-mode-node" "^3.0.7" + "@smithy/util-endpoints" "^2.0.4" + "@smithy/util-middleware" "^3.0.3" + "@smithy/util-retry" "^3.0.3" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@aws-sdk/core@3.609.0": + version "3.609.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.609.0.tgz#4c3994cd341452d1ef1a8b5e81a16442a7422287" + integrity sha512-ptqw+DTxLr01+pKjDUuo53SEDzI+7nFM3WfQaEo0yhDg8vWw8PER4sWj1Ysx67ksctnZesPUjqxd5SHbtdBxiA== + dependencies: + "@smithy/core" "^2.2.4" + "@smithy/protocol-http" "^4.0.3" + "@smithy/signature-v4" "^3.1.2" + "@smithy/smithy-client" "^3.1.5" + "@smithy/types" "^3.3.0" + fast-xml-parser "4.2.5" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-env@3.609.0": + version "3.609.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.609.0.tgz#b3f32e5a8ff8b541e151eadadfb60283aa3d835e" + integrity sha512-v69ZCWcec2iuV9vLVJMa6fAb5xwkzN4jYIT8yjo2c4Ia/j976Q+TPf35Pnz5My48Xr94EFcaBazrWedF+kwfuQ== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/property-provider" "^3.1.3" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-http@3.613.0": + version "3.613.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.613.0.tgz#bb7987f8f78bc3372c56aadb52e5ac965bf168ad" + integrity sha512-MCiUFxowFzprzIXFXsqbp/3DViJ7nFmBW+XJkoRQWqNmThbkz/E8sb40WmL9UFdZHJph2KDjzABKYH5f0lHZaA== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/fetch-http-handler" "^3.2.0" + "@smithy/node-http-handler" "^3.1.1" + "@smithy/property-provider" "^3.1.3" + "@smithy/protocol-http" "^4.0.3" + "@smithy/smithy-client" "^3.1.5" + "@smithy/types" "^3.3.0" + "@smithy/util-stream" "^3.0.5" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-ini@3.613.0": + version "3.613.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.613.0.tgz#11736835f330571d15d240bc6d7812c826d845b0" + integrity sha512-scHV7K0YpllYMWxPnqxssWU+7S3WNXH1m5Rw8Ax96pfcfnaoatiWXps2XSSdGlChdF9gNVnewjRKFOTLyyzdAw== + dependencies: + "@aws-sdk/credential-provider-env" "3.609.0" + "@aws-sdk/credential-provider-http" "3.613.0" + "@aws-sdk/credential-provider-process" "3.609.0" + "@aws-sdk/credential-provider-sso" "3.609.0" + "@aws-sdk/credential-provider-web-identity" "3.609.0" + "@aws-sdk/types" "3.609.0" + "@smithy/credential-provider-imds" "^3.1.3" + "@smithy/property-provider" "^3.1.3" + "@smithy/shared-ini-file-loader" "^3.1.3" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-node@3.613.0": + version "3.613.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.613.0.tgz#9d9a03658e9b5e657fd3b75955e58971d62c2e0c" + integrity sha512-n3yd0CDuUKcQFhjRLAQfQpZyZ2ddrHC7QOKQqE+Fkx+Fs5zoG+NRLK1EBkBW/G9zk8Ck4+rG3OOI3CuNpJ2PCw== + dependencies: + "@aws-sdk/credential-provider-env" "3.609.0" + "@aws-sdk/credential-provider-http" "3.613.0" + "@aws-sdk/credential-provider-ini" "3.613.0" + "@aws-sdk/credential-provider-process" "3.609.0" + "@aws-sdk/credential-provider-sso" "3.609.0" + "@aws-sdk/credential-provider-web-identity" "3.609.0" + "@aws-sdk/types" "3.609.0" + "@smithy/credential-provider-imds" "^3.1.3" + "@smithy/property-provider" "^3.1.3" + "@smithy/shared-ini-file-loader" "^3.1.3" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-process@3.609.0": + version "3.609.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.609.0.tgz#2bfa160eec4be8532a45061810466ee3462ce240" + integrity sha512-Ux35nGOSJKZWUIM3Ny0ROZ8cqPRUEkh+tR3X2o9ydEbFiLq3eMMyEnHJqx4EeUjLRchidlm4CCid9GxMe5/gdw== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/property-provider" "^3.1.3" + "@smithy/shared-ini-file-loader" "^3.1.3" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-sso@3.609.0": + version "3.609.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.609.0.tgz#94da403a000060700a34ee62fcf119fd4cacf167" + integrity sha512-oQPGDKMMIxjvTcm86g07RPYeC7mCNk+29dPpY15ZAPRpAF7F0tircsC3wT9fHzNaKShEyK5LuI5Kg/uxsdy+Iw== + dependencies: + "@aws-sdk/client-sso" "3.609.0" + "@aws-sdk/token-providers" "3.609.0" + "@aws-sdk/types" "3.609.0" + "@smithy/property-provider" "^3.1.3" + "@smithy/shared-ini-file-loader" "^3.1.3" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-web-identity@3.609.0": + version "3.609.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.609.0.tgz#d29222d6894347ee89c781ea090d388656df1d2a" + integrity sha512-U+PG8NhlYYF45zbr1km3ROtBMYqyyj/oK8NRp++UHHeuavgrP+4wJ4wQnlEaKvJBjevfo3+dlIBcaeQ7NYejWg== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/property-provider" "^3.1.3" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-bucket-endpoint@3.609.0": + version "3.609.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.609.0.tgz#f6f1e366c1816292d6e78866653c6e7122b7932f" + integrity sha512-QhHRfr4e7FqaMUAnOAFdQVOR3yDLw40i1IZPo+TeiKyev9LEyYEX2l6DbdaIwAztofOpAxfFNj/IJ0V/efzz/w== + dependencies: + "@aws-sdk/types" "3.609.0" + "@aws-sdk/util-arn-parser" "3.568.0" + "@smithy/node-config-provider" "^3.1.3" + "@smithy/protocol-http" "^4.0.3" + "@smithy/types" "^3.3.0" + "@smithy/util-config-provider" "^3.0.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-expect-continue@3.609.0": + version "3.609.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.609.0.tgz#89af76f115aa5fadd5a82fe4e95a64cb15150517" + integrity sha512-+zeg//mSer4JZRxOB/4mUOMUJyuYPwATnIC5moBB8P8Xe+mJaVRFy8qlCtzYNj2TycnlsBPzTK0j7P1yvDh97w== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/protocol-http" "^4.0.3" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-flexible-checksums@3.609.0": + version "3.609.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.609.0.tgz#3bcd54d64e65808f2053d5a38053625cacb5464a" + integrity sha512-TJ4WE+ehT+qcrhr7/yJCzmJJPmUoPPWIbCnFzqGxauH/dpVBCslmd1vZg3h2VnfRiaDkc6f68dqYVc29CaurhQ== + dependencies: + "@aws-crypto/crc32" "5.2.0" + "@aws-crypto/crc32c" "5.2.0" + "@aws-sdk/types" "3.609.0" + "@smithy/is-array-buffer" "^3.0.0" + "@smithy/protocol-http" "^4.0.3" + "@smithy/types" "^3.3.0" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-host-header@3.609.0": + version "3.609.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.609.0.tgz#844302cb905e4d09b9a1ea4bfa96729833068913" + integrity sha512-iTKfo158lc4jLDfYeZmYMIBHsn8m6zX+XB6birCSNZ/rrlzAkPbGE43CNdKfvjyWdqgLMRXF+B+OcZRvqhMXPQ== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/protocol-http" "^4.0.3" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-location-constraint@3.609.0": + version "3.609.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.609.0.tgz#7ed82d71e5ddcd50683ef2bbde10d1cc2492057e" + integrity sha512-xzsdoTkszGVqGVPjUmgoP7TORiByLueMHieI1fhQL888WPdqctwAx3ES6d/bA9Q/i8jnc6hs+Fjhy8UvBTkE9A== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-logger@3.609.0": + version "3.609.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.609.0.tgz#ed44d201f091b8bac908cbf14724c7a4d492553f" + integrity sha512-S62U2dy4jMDhDFDK5gZ4VxFdWzCtLzwbYyFZx2uvPYTECkepLUfzLic2BHg2Qvtu4QjX+oGE3P/7fwaGIsGNuQ== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-recursion-detection@3.609.0": + version "3.609.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.609.0.tgz#b7b869aaeac021a43dbea1435eaea81e5d2460b1" + integrity sha512-6sewsYB7/o/nbUfA99Aa/LokM+a/u4Wpm/X2o0RxOsDtSB795ObebLJe2BxY5UssbGaWkn7LswyfvrdZNXNj1w== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/protocol-http" "^4.0.3" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-sdk-s3@3.609.0": + version "3.609.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.609.0.tgz#a743bd63adf786c7c6d4b9102946b67a5032d1f4" + integrity sha512-kvwjL6OJFhAGWoYaIWR7HmILjiVk6xVj6QEU6qZMA7FtGgvlKi4pLfs8Of+hQqo+2TEhUoxG/5t6WqwB8uxjsw== + dependencies: + "@aws-sdk/types" "3.609.0" + "@aws-sdk/util-arn-parser" "3.568.0" + "@smithy/node-config-provider" "^3.1.3" + "@smithy/protocol-http" "^4.0.3" + "@smithy/signature-v4" "^3.1.2" + "@smithy/smithy-client" "^3.1.5" + "@smithy/types" "^3.3.0" + "@smithy/util-config-provider" "^3.0.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-signing@3.609.0": + version "3.609.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-signing/-/middleware-signing-3.609.0.tgz#7e5c4e70302bf87a7aa3dfde83ec1b387bf819f0" + integrity sha512-2w3dBLjQVKIajYzokO4hduq8/0hSMUYHHmIo1Kdl+MSY8uwRBt12bLL6pyreobTcRMxizvn2ph/CQ9I1ST/WGQ== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/property-provider" "^3.1.3" + "@smithy/protocol-http" "^4.0.3" + "@smithy/signature-v4" "^3.1.2" + "@smithy/types" "^3.3.0" + "@smithy/util-middleware" "^3.0.3" + tslib "^2.6.2" + +"@aws-sdk/middleware-ssec@3.609.0": + version "3.609.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-ssec/-/middleware-ssec-3.609.0.tgz#b87a8bc6133f3f6bdc6801183d0f9dad3f93cf9f" + integrity sha512-GZSD1s7+JswWOTamVap79QiDaIV7byJFssBW68GYjyRS5EBjNfwA/8s+6uE6g39R3ojyTbYOmvcANoZEhSULXg== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-user-agent@3.609.0": + version "3.609.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.609.0.tgz#eb3b7c604817be42f7ecd97988dda69a22e6011b" + integrity sha512-nbq7MXRmeXm4IDqh+sJRAxGPAq0OfGmGIwKvJcw66hLoG8CmhhVMZmIAEBDFr57S+YajGwnLLRt+eMI05MMeVA== + dependencies: + "@aws-sdk/types" "3.609.0" + "@aws-sdk/util-endpoints" "3.609.0" + "@smithy/protocol-http" "^4.0.3" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@aws-sdk/region-config-resolver@3.609.0": + version "3.609.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.609.0.tgz#68fe568d1c69f35f7fa3d66f718bd5751b1debda" + integrity sha512-lMHBG8zg9GWYBc9/XVPKyuAUd7iKqfPP7z04zGta2kGNOKbUTeqmAdc1gJGku75p4kglIPlGBorOxti8DhRmKw== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/node-config-provider" "^3.1.3" + "@smithy/types" "^3.3.0" + "@smithy/util-config-provider" "^3.0.0" + "@smithy/util-middleware" "^3.0.3" + tslib "^2.6.2" + +"@aws-sdk/signature-v4-multi-region@3.609.0": + version "3.609.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.609.0.tgz#c88c4a25713bd50b7b253d611e3d2473258087eb" + integrity sha512-FJs0BxVMyYOKNu7nzFI1kehfgWoYmdto5B8BSS29geUACF7jlOoeCfNZWVrnMjvAxVlSQ5O7Mr575932BnsycA== + dependencies: + "@aws-sdk/middleware-sdk-s3" "3.609.0" + "@aws-sdk/types" "3.609.0" + "@smithy/protocol-http" "^4.0.3" + "@smithy/signature-v4" "^3.1.2" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@aws-sdk/token-providers@3.609.0": + version "3.609.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.609.0.tgz#cfa9cdc84fefe71277c7d44b08b09f42c16c1d66" + integrity sha512-WvhW/7XSf+H7YmtiIigQxfDVZVZI7mbKikQ09YpzN7FeN3TmYib1+0tB+EE9TbICkwssjiFc71FEBEh4K9grKQ== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/property-provider" "^3.1.3" + "@smithy/shared-ini-file-loader" "^3.1.3" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@aws-sdk/types@3.609.0", "@aws-sdk/types@^3.222.0": + version "3.609.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.609.0.tgz#06b39d799c9f197a7b43670243e8e78a3bf7d6a5" + integrity sha512-+Tqnh9w0h2LcrUsdXyT1F8mNhXz+tVYBtP19LpeEGntmvHwa2XzvLUCWpoIAIVsHp5+HdB2X9Sn0KAtmbFXc2Q== + dependencies: + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@aws-sdk/util-arn-parser@3.568.0": + version "3.568.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-arn-parser/-/util-arn-parser-3.568.0.tgz#6a19a8c6bbaa520b6be1c278b2b8c17875b91527" + integrity sha512-XUKJWWo+KOB7fbnPP0+g/o5Ulku/X53t7i/h+sPHr5xxYTJJ9CYnbToo95mzxe7xWvkLrsNtJ8L+MnNn9INs2w== + dependencies: + tslib "^2.6.2" + +"@aws-sdk/util-endpoints@3.609.0": + version "3.609.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.609.0.tgz#e02d3fce2f999d750828dacf9f37289a1a48f6c9" + integrity sha512-Rh+3V8dOvEeE1aQmUy904DYWtLUEJ7Vf5XBPlQ6At3pBhp+zpXbsnpZzVL33c8lW1xfj6YPwtO6gOeEsl1juCQ== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/types" "^3.3.0" + "@smithy/util-endpoints" "^2.0.4" + tslib "^2.6.2" + +"@aws-sdk/util-locate-window@^3.0.0": + version "3.568.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-locate-window/-/util-locate-window-3.568.0.tgz#2acc4b2236af0d7494f7e517401ba6b3c4af11ff" + integrity sha512-3nh4TINkXYr+H41QaPelCceEB2FXP3fxp93YZXB/kqJvX0U9j0N0Uk45gvsjmEPzG8XxkPEeLIfT2I1M7A6Lig== + dependencies: + tslib "^2.6.2" + +"@aws-sdk/util-user-agent-browser@3.609.0": + version "3.609.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.609.0.tgz#aa15421b2e32ae8bc589dac2bd6e8969832ce588" + integrity sha512-fojPU+mNahzQ0YHYBsx0ZIhmMA96H+ZIZ665ObU9tl+SGdbLneVZVikGve+NmHTQwHzwkFsZYYnVKAkreJLAtA== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/types" "^3.3.0" + bowser "^2.11.0" + tslib "^2.6.2" + +"@aws-sdk/util-user-agent-node@3.609.0": + version "3.609.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.609.0.tgz#f8270517b2961cbf627e4e8fb6338ad153db44bb" + integrity sha512-DlZBwQ/HkZyf3pOWc7+wjJRk5R7x9YxHhs2szHwtv1IW30KMabjjjX0GMlGJ9LLkBHkbaaEY/w9Tkj12XRLhRg== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/node-config-provider" "^3.1.3" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@aws-sdk/xml-builder@3.609.0": + version "3.609.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/xml-builder/-/xml-builder-3.609.0.tgz#eeb3d5cde000a23cfeeefe0354b6193440dc7d87" + integrity sha512-l9XxNcA4HX98rwCC2/KoiWcmEiRfZe4G+mYwDbCFT87JIMj6GBhLDkAzr/W8KAaA2IDr8Vc6J8fZPgVulxxfMA== + dependencies: + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@cspotcode/source-map-support@^0.8.0": + version "0.8.1" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" + integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== + dependencies: + "@jridgewell/trace-mapping" "0.3.9" + +"@defillama/sdk@^5.0.10": + version "5.0.73" + resolved "https://registry.yarnpkg.com/@defillama/sdk/-/sdk-5.0.73.tgz#8011be5938f02c87806c21764c90dd142187bf34" + integrity sha512-uLZeOFNWPKVyZAMtO7dXSJreHKWqETHpbPMZzpNR47icGl4nS2o/SX8xW82BmdLU7cp25EG9sN/sKkht/KnWvA== + dependencies: + "@aws-sdk/client-s3" "^3.400.0" + "@elastic/elasticsearch" "^8.13.1" + "@supercharge/promise-pool" "^2.1.0" + axios "^1.6.5" + ethers "^6.0.0" + p-limit "^3.0.0" + tron-format-address "^0.1.11" + +"@elastic/elasticsearch@^8.13.1": + version "8.14.0" + resolved "https://registry.yarnpkg.com/@elastic/elasticsearch/-/elasticsearch-8.14.0.tgz#93b1f2a7cb6cc5cd1ceebf5060576bc690432e0a" + integrity sha512-MGrgCI4y+Ozssf5Q2IkVJlqt5bUMnKIICG2qxeOfrJNrVugMCBCAQypyesmSSocAtNm8IX3LxfJ3jQlFHmKe2w== + dependencies: + "@elastic/transport" "^8.6.0" + tslib "^2.4.0" + +"@elastic/transport@^8.6.0": + version "8.7.0" + resolved "https://registry.yarnpkg.com/@elastic/transport/-/transport-8.7.0.tgz#006987fc5583f61c266e0b1003371e82efc7a6b5" + integrity sha512-IqXT7a8DZPJtqP2qmX1I2QKmxYyN27kvSW4g6pInESE1SuGwZDp2FxHJ6W2kwmYOJwQdAt+2aWwzXO5jHo9l4A== + dependencies: + "@opentelemetry/api" "1.x" + debug "^4.3.4" + hpagent "^1.0.0" + ms "^2.1.3" + secure-json-parse "^2.4.0" + tslib "^2.4.0" + undici "^6.12.0" + +"@graphql-typed-document-node/core@^3.1.1": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@graphql-typed-document-node/core/-/core-3.2.0.tgz#5f3d96ec6b2354ad6d8a28bf216a1d97b5426861" + integrity sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ== + +"@isaacs/cliui@^8.0.2": + version "8.0.2" + resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" + integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== + dependencies: + string-width "^5.1.2" + string-width-cjs "npm:string-width@^4.2.0" + strip-ansi "^7.0.1" + strip-ansi-cjs "npm:strip-ansi@^6.0.1" + wrap-ansi "^8.1.0" + wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" + +"@jridgewell/resolve-uri@^3.0.3": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== + +"@jridgewell/sourcemap-codec@^1.4.10": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" + integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== + +"@jridgewell/trace-mapping@0.3.9": + version "0.3.9" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" + integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@noble/curves@1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.2.0.tgz#92d7e12e4e49b23105a2555c6984d41733d65c35" + integrity sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw== + dependencies: + "@noble/hashes" "1.3.2" + +"@noble/hashes@1.3.2": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.2.tgz#6f26dbc8fbc7205873ce3cee2f690eba0d421b39" + integrity sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ== + +"@opentelemetry/api@1.x": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/api/-/api-1.9.0.tgz#d03eba68273dc0f7509e2a3d5cba21eae10379fe" + integrity sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg== + +"@pkgjs/parseargs@^0.11.0": + version "0.11.0" + resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" + integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== + +"@smithy/abort-controller@^3.1.1": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-3.1.1.tgz#291210611ff6afecfc198d0ca72d5771d8461d16" + integrity sha512-MBJBiidoe+0cTFhyxT8g+9g7CeVccLM0IOKKUMCNQ1CNMJ/eIfoo0RTfVrXOONEI1UCN1W+zkiHSbzUNE9dZtQ== + dependencies: + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@smithy/chunked-blob-reader-native@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-3.0.0.tgz#f1104b30030f76f9aadcbd3cdca4377bd1ba2695" + integrity sha512-VDkpCYW+peSuM4zJip5WDfqvg2Mo/e8yxOv3VF1m11y7B8KKMKVFtmZWDe36Fvk8rGuWrPZHHXZ7rR7uM5yWyg== + dependencies: + "@smithy/util-base64" "^3.0.0" + tslib "^2.6.2" + +"@smithy/chunked-blob-reader@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/chunked-blob-reader/-/chunked-blob-reader-3.0.0.tgz#e5d3b04e9b273ba8b7ede47461e2aa96c8aa49e0" + integrity sha512-sbnURCwjF0gSToGlsBiAmd1lRCmSn72nu9axfJu5lIx6RUEgHu6GwTMbqCdhQSi0Pumcm5vFxsi9XWXb2mTaoA== + dependencies: + tslib "^2.6.2" + +"@smithy/config-resolver@^3.0.4", "@smithy/config-resolver@^3.0.5": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-3.0.5.tgz#727978bba7ace754c741c259486a19d3083431fd" + integrity sha512-SkW5LxfkSI1bUC74OtfBbdz+grQXYiPYolyu8VfpLIjEoN/sHVBlLeGXMQ1vX4ejkgfv6sxVbQJ32yF2cl1veA== + dependencies: + "@smithy/node-config-provider" "^3.1.4" + "@smithy/types" "^3.3.0" + "@smithy/util-config-provider" "^3.0.0" + "@smithy/util-middleware" "^3.0.3" + tslib "^2.6.2" + +"@smithy/core@^2.2.4": + version "2.2.6" + resolved "https://registry.yarnpkg.com/@smithy/core/-/core-2.2.6.tgz#05e3482079fff7522077e0f3ce2ee6cc507f461c" + integrity sha512-tBbVIv/ui7/lLTKayYJJvi8JLVL2SwOQTbNFEOrvzSE3ktByvsa1erwBOnAMo8N5Vu30g7lN4lLStrU75oDGuw== + dependencies: + "@smithy/middleware-endpoint" "^3.0.5" + "@smithy/middleware-retry" "^3.0.9" + "@smithy/middleware-serde" "^3.0.3" + "@smithy/protocol-http" "^4.0.3" + "@smithy/smithy-client" "^3.1.7" + "@smithy/types" "^3.3.0" + "@smithy/util-middleware" "^3.0.3" + tslib "^2.6.2" + +"@smithy/credential-provider-imds@^3.1.3", "@smithy/credential-provider-imds@^3.1.4": + version "3.1.4" + resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-3.1.4.tgz#797116f68cc3ffa658469558cc014f25d9febe09" + integrity sha512-NKyH01m97Xa5xf3pB2QOF3lnuE8RIK0hTVNU5zvZAwZU8uspYO4DHQVlK+Y5gwSrujTfHvbfd1D9UFJAc0iYKQ== + dependencies: + "@smithy/node-config-provider" "^3.1.4" + "@smithy/property-provider" "^3.1.3" + "@smithy/types" "^3.3.0" + "@smithy/url-parser" "^3.0.3" + tslib "^2.6.2" + +"@smithy/eventstream-codec@^3.1.2": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-3.1.2.tgz#4a1c72b34400631b829241151984a1ad8c4f963c" + integrity sha512-0mBcu49JWt4MXhrhRAlxASNy0IjDRFU+aWNDRal9OtUJvJNiwDuyKMUONSOjLjSCeGwZaE0wOErdqULer8r7yw== + dependencies: + "@aws-crypto/crc32" "5.2.0" + "@smithy/types" "^3.3.0" + "@smithy/util-hex-encoding" "^3.0.0" + tslib "^2.6.2" + +"@smithy/eventstream-serde-browser@^3.0.4": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-3.0.4.tgz#98d6e7ae60d297e37ee7775af2a7a8bbe574579d" + integrity sha512-Eo4anLZX6ltGJTZ5yJMc80gZPYYwBn44g0h7oFq6et+TYr5dUsTpIcDbz2evsOKIZhZ7zBoFWHtBXQ4QQeb5xA== + dependencies: + "@smithy/eventstream-serde-universal" "^3.0.4" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@smithy/eventstream-serde-config-resolver@^3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.0.3.tgz#f852e096d0ad112363b4685e1d441088d1fce67a" + integrity sha512-NVTYjOuYpGfrN/VbRQgn31x73KDLfCXCsFdad8DiIc3IcdxL+dYA9zEQPyOP7Fy2QL8CPy2WE4WCUD+ZsLNfaQ== + dependencies: + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@smithy/eventstream-serde-node@^3.0.4": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-node/-/eventstream-serde-node-3.0.4.tgz#6301752ca51b3ebabcd2dec112f1dacd990de4c1" + integrity sha512-mjlG0OzGAYuUpdUpflfb9zyLrBGgmQmrobNT8b42ZTsGv/J03+t24uhhtVEKG/b2jFtPIHF74Bq+VUtbzEKOKg== + dependencies: + "@smithy/eventstream-serde-universal" "^3.0.4" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@smithy/eventstream-serde-universal@^3.0.4": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-3.0.4.tgz#6754de5b94bdc286d8ef1d6bcf22d80f6ab68f30" + integrity sha512-Od9dv8zh3PgOD7Vj4T3HSuox16n0VG8jJIM2gvKASL6aCtcS8CfHZDWe1Ik3ZXW6xBouU+45Q5wgoliWDZiJ0A== + dependencies: + "@smithy/eventstream-codec" "^3.1.2" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@smithy/fetch-http-handler@^3.2.0", "@smithy/fetch-http-handler@^3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.1.tgz#04ba6804cdf2b1cb783229eede6b9cd8653c5543" + integrity sha512-0w0bgUvZmfa0vHN8a+moByhCJT07WN6AHKEhFSOLsDpnszm+5dLVv5utGaqbhOrZ/aF5x3xuPMs/oMCd+4O5xg== + dependencies: + "@smithy/protocol-http" "^4.0.3" + "@smithy/querystring-builder" "^3.0.3" + "@smithy/types" "^3.3.0" + "@smithy/util-base64" "^3.0.0" + tslib "^2.6.2" + +"@smithy/hash-blob-browser@^3.1.2": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@smithy/hash-blob-browser/-/hash-blob-browser-3.1.2.tgz#90281c1f183d93686fb4f26107f1819644d68829" + integrity sha512-hAbfqN2UbISltakCC2TP0kx4LqXBttEv2MqSPE98gVuDFMf05lU+TpC41QtqGP3Ff5A3GwZMPfKnEy0VmEUpmg== + dependencies: + "@smithy/chunked-blob-reader" "^3.0.0" + "@smithy/chunked-blob-reader-native" "^3.0.0" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@smithy/hash-node@^3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-3.0.3.tgz#82c5cb7b0f1a29ee7319081853d2d158c07dff24" + integrity sha512-2ctBXpPMG+B3BtWSGNnKELJ7SH9e4TNefJS0cd2eSkOOROeBnnVBnAy9LtJ8tY4vUEoe55N4CNPxzbWvR39iBw== + dependencies: + "@smithy/types" "^3.3.0" + "@smithy/util-buffer-from" "^3.0.0" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@smithy/hash-stream-node@^3.1.2": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@smithy/hash-stream-node/-/hash-stream-node-3.1.2.tgz#89f0290ae44b113863878e75b10c484ff48af71c" + integrity sha512-PBgDMeEdDzi6JxKwbfBtwQG9eT9cVwsf0dZzLXoJF4sHKHs5HEo/3lJWpn6jibfJwT34I1EBXpBnZE8AxAft6g== + dependencies: + "@smithy/types" "^3.3.0" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@smithy/invalid-dependency@^3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-3.0.3.tgz#8d9fd70e3a94b565a4eba4ffbdc95238e1930528" + integrity sha512-ID1eL/zpDULmHJbflb864k72/SNOZCADRc9i7Exq3RUNJw6raWUSlFEQ+3PX3EYs++bTxZB2dE9mEHTQLv61tw== + dependencies: + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@smithy/is-array-buffer@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz#f84f0d9f9a36601a9ca9381688bd1b726fd39111" + integrity sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA== + dependencies: + tslib "^2.6.2" + +"@smithy/is-array-buffer@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz#9a95c2d46b8768946a9eec7f935feaddcffa5e7a" + integrity sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ== + dependencies: + tslib "^2.6.2" + +"@smithy/md5-js@^3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@smithy/md5-js/-/md5-js-3.0.3.tgz#55ee40aa24075b096c39f7910590c18ff7660c98" + integrity sha512-O/SAkGVwpWmelpj/8yDtsaVe6sINHLB1q8YE/+ZQbDxIw3SRLbTZuRaI10K12sVoENdnHqzPp5i3/H+BcZ3m3Q== + dependencies: + "@smithy/types" "^3.3.0" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@smithy/middleware-content-length@^3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-3.0.3.tgz#426a7f907cc3c0a5d81deb84e16d38303e5a9ad8" + integrity sha512-Dbz2bzexReYIQDWMr+gZhpwBetNXzbhnEMhYKA6urqmojO14CsXjnsoPYO8UL/xxcawn8ZsuVU61ElkLSltIUQ== + dependencies: + "@smithy/protocol-http" "^4.0.3" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@smithy/middleware-endpoint@^3.0.4", "@smithy/middleware-endpoint@^3.0.5": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-3.0.5.tgz#76e8a559e891282d3ede9ab8e228e66cbee89b21" + integrity sha512-V4acqqrh5tDxUEGVTOgf2lYMZqPQsoGntCrjrJZEeBzEzDry2d2vcI1QCXhGltXPPY+BMc6eksZMguA9fIY8vA== + dependencies: + "@smithy/middleware-serde" "^3.0.3" + "@smithy/node-config-provider" "^3.1.4" + "@smithy/shared-ini-file-loader" "^3.1.4" + "@smithy/types" "^3.3.0" + "@smithy/url-parser" "^3.0.3" + "@smithy/util-middleware" "^3.0.3" + tslib "^2.6.2" + +"@smithy/middleware-retry@^3.0.7", "@smithy/middleware-retry@^3.0.9": + version "3.0.9" + resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-3.0.9.tgz#3d5c33b49ad372bf02c8525931febc5cc246815c" + integrity sha512-Mrv9omExU1gA7Y0VEJG2LieGfPYtwwcEiOnVGZ54a37NEMr66TJ0glFslOJFuKWG6izg5DpKIUmDV9rRxjm47Q== + dependencies: + "@smithy/node-config-provider" "^3.1.4" + "@smithy/protocol-http" "^4.0.3" + "@smithy/service-error-classification" "^3.0.3" + "@smithy/smithy-client" "^3.1.7" + "@smithy/types" "^3.3.0" + "@smithy/util-middleware" "^3.0.3" + "@smithy/util-retry" "^3.0.3" + tslib "^2.6.2" + uuid "^9.0.1" + +"@smithy/middleware-serde@^3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-3.0.3.tgz#74d974460f74d99f38c861e6862984543a880a66" + integrity sha512-puUbyJQBcg9eSErFXjKNiGILJGtiqmuuNKEYNYfUD57fUl4i9+mfmThtQhvFXU0hCVG0iEJhvQUipUf+/SsFdA== + dependencies: + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@smithy/middleware-stack@^3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-3.0.3.tgz#91845c7e61e6f137fa912b623b6def719a4f6ce7" + integrity sha512-r4klY9nFudB0r9UdSMaGSyjyQK5adUyPnQN/ZM6M75phTxOdnc/AhpvGD1fQUvgmqjQEBGCwpnPbDm8pH5PapA== + dependencies: + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@smithy/node-config-provider@^3.1.3", "@smithy/node-config-provider@^3.1.4": + version "3.1.4" + resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-3.1.4.tgz#05647bed666aa8036a1ad72323c1942e5d421be1" + integrity sha512-YvnElQy8HR4vDcAjoy7Xkx9YT8xZP4cBXcbJSgm/kxmiQu08DwUwj8rkGnyoJTpfl/3xYHH+d8zE+eHqoDCSdQ== + dependencies: + "@smithy/property-provider" "^3.1.3" + "@smithy/shared-ini-file-loader" "^3.1.4" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@smithy/node-http-handler@^3.1.1", "@smithy/node-http-handler@^3.1.2": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-3.1.2.tgz#2d753c07f11e7a3da3534b156320d1e0e9401617" + integrity sha512-Td3rUNI7qqtoSLTsJBtsyfoG4cF/XMFmJr6Z2dX8QNzIi6tIW6YmuyFml8mJ2cNpyWNqITKbROMOFrvQjmsOvw== + dependencies: + "@smithy/abort-controller" "^3.1.1" + "@smithy/protocol-http" "^4.0.3" + "@smithy/querystring-builder" "^3.0.3" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@smithy/property-provider@^3.1.3": + version "3.1.3" + resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-3.1.3.tgz#afd57ea82a3f6c79fbda95e3cb85c0ee0a79f39a" + integrity sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g== + dependencies: + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@smithy/protocol-http@^4.0.3": + version "4.0.3" + resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-4.0.3.tgz#acf16058504e3cce2dbe8abf94f7b544cd09d3f4" + integrity sha512-x5jmrCWwQlx+Zv4jAtc33ijJ+vqqYN+c/ZkrnpvEe/uDas7AT7A/4Rc2CdfxgWv4WFGmEqODIrrUToPN6DDkGw== + dependencies: + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@smithy/querystring-builder@^3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-3.0.3.tgz#6b0e566f885bb84938d077c69e8f8555f686af13" + integrity sha512-vyWckeUeesFKzCDaRwWLUA1Xym9McaA6XpFfAK5qI9DKJ4M33ooQGqvM4J+LalH4u/Dq9nFiC8U6Qn1qi0+9zw== + dependencies: + "@smithy/types" "^3.3.0" + "@smithy/util-uri-escape" "^3.0.0" + tslib "^2.6.2" + +"@smithy/querystring-parser@^3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-3.0.3.tgz#272a6b83f88dfcbbec8283d72a6bde850cc00091" + integrity sha512-zahM1lQv2YjmznnfQsWbYojFe55l0SLG/988brlLv1i8z3dubloLF+75ATRsqPBboUXsW6I9CPGE5rQgLfY0vQ== + dependencies: + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@smithy/service-error-classification@^3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-3.0.3.tgz#73484255060a094aa9372f6cd972dcaf97e3ce80" + integrity sha512-Jn39sSl8cim/VlkLsUhRFq/dKDnRUFlfRkvhOJaUbLBXUsLRLNf9WaxDv/z9BjuQ3A6k/qE8af1lsqcwm7+DaQ== + dependencies: + "@smithy/types" "^3.3.0" + +"@smithy/shared-ini-file-loader@^3.1.3", "@smithy/shared-ini-file-loader@^3.1.4": + version "3.1.4" + resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.4.tgz#7dceaf5a5307a2ee347ace8aba17312a1a3ede15" + integrity sha512-qMxS4hBGB8FY2GQqshcRUy1K6k8aBWP5vwm8qKkCT3A9K2dawUwOIJfqh9Yste/Bl0J2lzosVyrXDj68kLcHXQ== + dependencies: + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@smithy/signature-v4@^3.1.2": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-3.1.2.tgz#63fc0d4f9a955e902138fb0a57fafc96b9d4e8bb" + integrity sha512-3BcPylEsYtD0esM4Hoyml/+s7WP2LFhcM3J2AGdcL2vx9O60TtfpDOL72gjb4lU8NeRPeKAwR77YNyyGvMbuEA== + dependencies: + "@smithy/is-array-buffer" "^3.0.0" + "@smithy/types" "^3.3.0" + "@smithy/util-hex-encoding" "^3.0.0" + "@smithy/util-middleware" "^3.0.3" + "@smithy/util-uri-escape" "^3.0.0" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@smithy/smithy-client@^3.1.5", "@smithy/smithy-client@^3.1.7": + version "3.1.7" + resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-3.1.7.tgz#56c1eee68b903053e246fb141253a567cc4d9930" + integrity sha512-nZbJZB0XI3YnaFBWGDBr7kjaew6O0oNYNmopyIz6gKZEbxzrtH7rwvU1GcVxcSFoOwWecLJEe79fxEMljHopFQ== + dependencies: + "@smithy/middleware-endpoint" "^3.0.5" + "@smithy/middleware-stack" "^3.0.3" + "@smithy/protocol-http" "^4.0.3" + "@smithy/types" "^3.3.0" + "@smithy/util-stream" "^3.0.6" + tslib "^2.6.2" + +"@smithy/types@^3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@smithy/types/-/types-3.3.0.tgz#fae037c733d09bc758946a01a3de0ef6e210b16b" + integrity sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA== + dependencies: + tslib "^2.6.2" + +"@smithy/url-parser@^3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-3.0.3.tgz#e8a060d9810b24b1870385fc2b02485b8a6c5955" + integrity sha512-pw3VtZtX2rg+s6HMs6/+u9+hu6oY6U7IohGhVNnjbgKy86wcIsSZwgHrFR+t67Uyxvp4Xz3p3kGXXIpTNisq8A== + dependencies: + "@smithy/querystring-parser" "^3.0.3" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@smithy/util-base64@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-base64/-/util-base64-3.0.0.tgz#f7a9a82adf34e27a72d0719395713edf0e493017" + integrity sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ== + dependencies: + "@smithy/util-buffer-from" "^3.0.0" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@smithy/util-body-length-browser@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-body-length-browser/-/util-body-length-browser-3.0.0.tgz#86ec2f6256310b4845a2f064e2f571c1ca164ded" + integrity sha512-cbjJs2A1mLYmqmyVl80uoLTJhAcfzMOyPgjwAYusWKMdLeNtzmMz9YxNl3/jRLoxSS3wkqkf0jwNdtXWtyEBaQ== + dependencies: + tslib "^2.6.2" + +"@smithy/util-body-length-node@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-body-length-node/-/util-body-length-node-3.0.0.tgz#99a291bae40d8932166907fe981d6a1f54298a6d" + integrity sha512-Tj7pZ4bUloNUP6PzwhN7K386tmSmEET9QtQg0TgdNOnxhZvCssHji+oZTUIuzxECRfG8rdm2PMw2WCFs6eIYkA== + dependencies: + tslib "^2.6.2" + +"@smithy/util-buffer-from@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz#6fc88585165ec73f8681d426d96de5d402021e4b" + integrity sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA== + dependencies: + "@smithy/is-array-buffer" "^2.2.0" + tslib "^2.6.2" + +"@smithy/util-buffer-from@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz#559fc1c86138a89b2edaefc1e6677780c24594e3" + integrity sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA== + dependencies: + "@smithy/is-array-buffer" "^3.0.0" + tslib "^2.6.2" + +"@smithy/util-config-provider@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-config-provider/-/util-config-provider-3.0.0.tgz#62c6b73b22a430e84888a8f8da4b6029dd5b8efe" + integrity sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ== + dependencies: + tslib "^2.6.2" + +"@smithy/util-defaults-mode-browser@^3.0.7": + version "3.0.9" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.9.tgz#a7035ca57f359810f52d828c68ad8746b0120113" + integrity sha512-WKPcElz92MAQG09miBdb0GxEH/MwD5GfE8g07WokITq5g6J1ROQfYCKC1wNnkqAGfrSywT7L0rdvvqlBplqiyA== + dependencies: + "@smithy/property-provider" "^3.1.3" + "@smithy/smithy-client" "^3.1.7" + "@smithy/types" "^3.3.0" + bowser "^2.11.0" + tslib "^2.6.2" + +"@smithy/util-defaults-mode-node@^3.0.7": + version "3.0.9" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.9.tgz#d31cd62e9bcc005f92923fc7b6bc0366c3b0478a" + integrity sha512-dQLrUqFxqpf0GvEKEuFdgXcdZwz6oFm752h4d6C7lQz+RLddf761L2r7dSwGWzESMMB3wKj0jL+skRhEGlecjw== + dependencies: + "@smithy/config-resolver" "^3.0.5" + "@smithy/credential-provider-imds" "^3.1.4" + "@smithy/node-config-provider" "^3.1.4" + "@smithy/property-provider" "^3.1.3" + "@smithy/smithy-client" "^3.1.7" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@smithy/util-endpoints@^2.0.4": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-2.0.5.tgz#e3a7a4d1c41250bfd2b2d890d591273a7d8934be" + integrity sha512-ReQP0BWihIE68OAblC/WQmDD40Gx+QY1Ez8mTdFMXpmjfxSyz2fVQu3A4zXRfQU9sZXtewk3GmhfOHswvX+eNg== + dependencies: + "@smithy/node-config-provider" "^3.1.4" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@smithy/util-hex-encoding@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz#32938b33d5bf2a15796cd3f178a55b4155c535e6" + integrity sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ== + dependencies: + tslib "^2.6.2" + +"@smithy/util-middleware@^3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-3.0.3.tgz#07bf9602682f5a6c55bc2f0384303f85fc68c87e" + integrity sha512-l+StyYYK/eO3DlVPbU+4Bi06Jjal+PFLSMmlWM1BEwyLxZ3aKkf1ROnoIakfaA7mC6uw3ny7JBkau4Yc+5zfWw== + dependencies: + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@smithy/util-retry@^3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-3.0.3.tgz#9b2ac0dbb1c81f69812a8affa4d772bebfc0e049" + integrity sha512-AFw+hjpbtVApzpNDhbjNG5NA3kyoMs7vx0gsgmlJF4s+yz1Zlepde7J58zpIRIsdjc+emhpAITxA88qLkPF26w== + dependencies: + "@smithy/service-error-classification" "^3.0.3" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@smithy/util-stream@^3.0.5", "@smithy/util-stream@^3.0.6": + version "3.0.6" + resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-3.0.6.tgz#233624e0e024f5846cf1fdbfb2a2ab5352d724ee" + integrity sha512-w9i//7egejAIvplX821rPWWgaiY1dxsQUw0hXX7qwa/uZ9U3zplqTQ871jWadkcVB9gFDhkPWYVZf4yfFbZ0xA== + dependencies: + "@smithy/fetch-http-handler" "^3.2.1" + "@smithy/node-http-handler" "^3.1.2" + "@smithy/types" "^3.3.0" + "@smithy/util-base64" "^3.0.0" + "@smithy/util-buffer-from" "^3.0.0" + "@smithy/util-hex-encoding" "^3.0.0" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@smithy/util-uri-escape@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz#e43358a78bf45d50bb736770077f0f09195b6f54" + integrity sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg== + dependencies: + tslib "^2.6.2" + +"@smithy/util-utf8@^2.0.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@smithy/util-utf8/-/util-utf8-2.3.0.tgz#dd96d7640363259924a214313c3cf16e7dd329c5" + integrity sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A== + dependencies: + "@smithy/util-buffer-from" "^2.2.0" + tslib "^2.6.2" + +"@smithy/util-utf8@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-utf8/-/util-utf8-3.0.0.tgz#1a6a823d47cbec1fd6933e5fc87df975286d9d6a" + integrity sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA== + dependencies: + "@smithy/util-buffer-from" "^3.0.0" + tslib "^2.6.2" + +"@smithy/util-waiter@^3.1.2": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@smithy/util-waiter/-/util-waiter-3.1.2.tgz#2d40c3312f3537feee763459a19acafab4c75cf3" + integrity sha512-4pP0EV3iTsexDx+8PPGAKCQpd/6hsQBaQhqWzU4hqKPHN5epPsxKbvUTIiYIHTxaKt6/kEaqPBpu/ufvfbrRzw== + dependencies: + "@smithy/abort-controller" "^3.1.1" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@supercharge/promise-pool@^2.1.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@supercharge/promise-pool/-/promise-pool-2.4.0.tgz#6050eea8c2d7f92ddd4ddc582ee328b15c034ad3" + integrity sha512-O9CMipBlq5OObdt1uKJGIzm9cdjpPWfj+a+Zw9EgWKxaMNHKC7EU7X9taj3H0EGQNLOSq2jAcOa3EzxlfHsD6w== + +"@supercharge/promise-pool@^3.1.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@supercharge/promise-pool/-/promise-pool-3.2.0.tgz#a6ab4afdf798e453a6bb51c4ae340852e1266af8" + integrity sha512-pj0cAALblTZBPtMltWOlZTQSLT07jIaFNeM8TWoJD1cQMgDB9mcMlVMoetiB35OzNJpqQ2b+QEtwiR9f20mADg== + +"@tsconfig/node10@^1.0.7": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.11.tgz#6ee46400685f130e278128c7b38b7e031ff5b2f2" + integrity sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw== + +"@tsconfig/node12@^1.0.7": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" + integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== + +"@tsconfig/node14@^1.0.0": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" + integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== + +"@tsconfig/node16@^1.0.2": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" + integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== + +"@types/async-retry@^1.4.8": + version "1.4.8" + resolved "https://registry.yarnpkg.com/@types/async-retry/-/async-retry-1.4.8.tgz#eb32df13aceb9ba1a8a80e7fe518ff4e3fe46bb3" + integrity sha512-Qup/B5PWLe86yI5I3av6ePGaeQrIHNKCwbsQotD6aHQ6YkHsMUxVZkZsmx/Ry3VZQ6uysHwTjQ7666+k6UjVJA== + dependencies: + "@types/retry" "*" + +"@types/debug@^4.1.8": + version "4.1.12" + resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.12.tgz#a155f21690871953410df4b6b6f53187f0500917" + integrity sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ== + dependencies: + "@types/ms" "*" + +"@types/ms@*": + version "0.7.34" + resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.34.tgz#10964ba0dee6ac4cd462e2795b6bebd407303433" + integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== + +"@types/node@*": + version "20.14.10" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.14.10.tgz#a1a218290f1b6428682e3af044785e5874db469a" + integrity sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ== + dependencies: + undici-types "~5.26.4" + +"@types/node@18.15.13": + version "18.15.13" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.15.13.tgz#f64277c341150c979e42b00e4ac289290c9df469" + integrity sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q== + +"@types/node@^18.7.23": + version "18.19.39" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.39.tgz#c316340a5b4adca3aee9dcbf05de385978590593" + integrity sha512-nPwTRDKUctxw3di5b4TfT3I0sWDiWoPQCZjXhvdkINntwr8lcoVCKsTgnXeRubKIlfnV+eN/HYk6Jb40tbcEAQ== + dependencies: + undici-types "~5.26.4" + +"@types/retry@*": + version "0.12.5" + resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.5.tgz#f090ff4bd8d2e5b940ff270ab39fd5ca1834a07e" + integrity sha512-3xSjTp3v03X/lSQLkczaN9UIEwJMoMCA1+Nb5HfbJEQWogdeQIyVtTvxPXDQjZ5zws8rFQfVfRdz03ARihPJgw== + +"@types/validator@^13.7.17": + version "13.12.0" + resolved "https://registry.yarnpkg.com/@types/validator/-/validator-13.12.0.tgz#1fe4c3ae9de5cf5193ce64717c99ef2fa7d8756f" + integrity sha512-nH45Lk7oPIJ1RVOF6JgFI6Dy0QpHEzq4QecZhvguxYPDwT8c93prCMqAtiIttm39voZ+DDR+qkNnMpJmMBRqag== + +acorn-walk@^8.1.1: + version "8.3.3" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.3.tgz#9caeac29eefaa0c41e3d4c65137de4d6f34df43e" + integrity sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw== + dependencies: + acorn "^8.11.0" + +acorn@^8.11.0, acorn@^8.4.1: + version "8.12.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.12.1.tgz#71616bdccbe25e27a54439e0046e89ca76df2248" + integrity sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg== + +aes-js@4.0.0-beta.5: + version "4.0.0-beta.5" + resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-4.0.0-beta.5.tgz#8d2452c52adedebc3a3e28465d858c11ca315873" + integrity sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q== + +ansi-escapes@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" + integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== + +ansi-escapes@^4.2.1, ansi-escapes@^4.3.1: + 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@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.1.tgz#123d6479e92ad45ad897d4054e3c7ca7db4944e1" + integrity sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw== + +ansi-regex@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed" + integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g== + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-regex@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" + integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansi-styles@^6.1.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" + integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== + +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + +async-retry@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/async-retry/-/async-retry-1.3.3.tgz#0e7f36c04d8478e7a58bdbed80cedf977785f280" + integrity sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw== + dependencies: + retry "0.13.1" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +axios@^1.6.5: + version "1.7.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.2.tgz#b625db8a7051fbea61c35a3cbb3a1daa7b9c7621" + integrity sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw== + dependencies: + follow-redirects "^1.15.6" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +bignumber.js@^9.1.0: + version "9.1.2" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.2.tgz#b7c4242259c008903b13707983b5f4bbd31eda0c" + integrity sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug== + +bl@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + +bowser@^2.11.0: + version "2.11.0" + resolved "https://registry.yarnpkg.com/bowser/-/bowser-2.11.0.tgz#5ca3c35757a7aa5771500c70a73a9f91ef420a8f" + integrity sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA== + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +buffer@^5.5.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + 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== + +cli-cursor@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + integrity sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw== + dependencies: + restore-cursor "^2.0.0" + +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-spinners@^2.5.0: + version "2.9.2" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.2.tgz#1773a8f4b9c4d6ac31563df53b3fc1d79462fe41" + integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== + +cli-width@^2.0.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" + integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw== + +cli-width@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" + integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== + +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== + +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== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +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" + +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + +cross-fetch@^3.1.5: + version "3.1.8" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.8.tgz#0327eba65fd68a7d119f8fb2bf9334a1a7956f82" + integrity sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg== + dependencies: + node-fetch "^2.6.12" + +cross-spawn@^7.0.0: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +debug@^4.3.4: + version "4.3.5" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.5.tgz#e83444eceb9fedd4a1da56d671ae2446a01a6e1e" + integrity sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg== + dependencies: + ms "2.1.2" + +defaults@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a" + integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== + dependencies: + clone "^1.0.2" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +dotenv@^16.0.3: + version "16.4.5" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.5.tgz#cdd3b3b604cb327e286b4762e13502f717cb099f" + integrity sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg== + +dottie@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/dottie/-/dottie-2.0.6.tgz#34564ebfc6ec5e5772272d466424ad5b696484d4" + integrity sha512-iGCHkfUc5kFekGiqhe8B/mdaurD+lakO9txNnTvKtA6PISrw86LgqHvRzWYPyoE2Ph5aMIrCw9/uko6XHTKCwA== + +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +ethers@^6.0.0, ethers@^6.9.2: + version "6.13.1" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.13.1.tgz#2b9f9c7455cde9d38b30fe6589972eb083652961" + integrity sha512-hdJ2HOxg/xx97Lm9HdCWk949BfYqYWpyw4//78SiwOLgASyfrNszfMUNB2joKjvGUdwhHfaiMMFFwacVVoLR9A== + dependencies: + "@adraffy/ens-normalize" "1.10.1" + "@noble/curves" "1.2.0" + "@noble/hashes" "1.3.2" + "@types/node" "18.15.13" + aes-js "4.0.0-beta.5" + tslib "2.4.0" + ws "8.17.1" + +external-editor@^3.0.3: + 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-files@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/extract-files/-/extract-files-9.0.0.tgz#8a7744f2437f81f5ed3250ed9f1550de902fe54a" + integrity sha512-CvdFfHkC95B4bBBk36hcEmvdR2awOdhhVUYH6S/zrVj3477zven/fJMYg7121h4T1xHZC+tetUpubpAhxwI7hQ== + +fast-xml-parser@4.2.5: + version "4.2.5" + resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz#a6747a09296a6cb34f2ae634019bf1738f3b421f" + integrity sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g== + dependencies: + strnum "^1.0.5" + +figures@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" + integrity sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA== + dependencies: + escape-string-regexp "^1.0.5" + +figures@^3.0.0, figures@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== + dependencies: + escape-string-regexp "^1.0.5" + +follow-redirects@^1.15.6: + version "1.15.6" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b" + integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== + +foreground-child@^3.1.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.2.1.tgz#767004ccf3a5b30df39bed90718bab43fe0a59f7" + integrity sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA== + dependencies: + cross-spawn "^7.0.0" + signal-exit "^4.0.1" + +form-data@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" + integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +fuzzy@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/fuzzy/-/fuzzy-0.1.3.tgz#4c76ec2ff0ac1a36a9dccf9a00df8623078d4ed8" + integrity sha512-/gZffu4ykarLrCiP3Ygsa86UAo1E5vEVlvTrpkKywXSbP9Xhln3oSp9QSV57gEq3JFFpGJ4GZ+5zdEp3FcUh4w== + +glob@^10.3.10: + version "10.4.5" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.5.tgz#f4d9f0b90ffdbab09c9d77f5f29b4262517b0956" + integrity sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg== + dependencies: + foreground-child "^3.1.0" + jackspeak "^3.1.2" + minimatch "^9.0.4" + minipass "^7.1.2" + package-json-from-dist "^1.0.0" + path-scurry "^1.11.1" + +graphql-request@5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/graphql-request/-/graphql-request-5.1.0.tgz#dbc8feee27d21b993cd5da2d3af67821827b240a" + integrity sha512-0OeRVYigVwIiXhNmqnPDt+JhMzsjinxHE7TVy3Lm6jUzav0guVcL0lfSbi6jVTRAxcbwgyr6yrZioSHxf9gHzw== + dependencies: + "@graphql-typed-document-node/core" "^3.1.1" + cross-fetch "^3.1.5" + extract-files "^9.0.0" + form-data "^3.0.0" + +graphql@^16.6.0: + version "16.9.0" + resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.9.0.tgz#1c310e63f16a49ce1fbb230bd0a000e99f6f115f" + integrity sha512-GGTKBX4SD7Wdb8mqeDLni2oaRGYQWjWHGKPQ24ZMnUtKfcsVoiv4uX8+LJr1K6U5VW2Lu1BwJnj7uiori0YtRw== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +hpagent@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/hpagent/-/hpagent-1.2.0.tgz#0ae417895430eb3770c03443456b8d90ca464903" + integrity sha512-A91dYTeIB6NoXG+PxTQpCCDDnfHsW9kc06Lvpu1TEe9gnd6ZFeiBoRO9JvzEv6xK7EX97/dUE8g/vBMTqTS3CA== + +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" + +ieee754@^1.1.13: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +inflection@^1.13.4: + version "1.13.4" + resolved "https://registry.yarnpkg.com/inflection/-/inflection-1.13.4.tgz#65aa696c4e2da6225b148d7a154c449366633a32" + integrity sha512-6I/HUDeYFfuNCVS3td055BaXBwKYuzw7K3ExVMStBowKo9oOAMJIXIHvdyR3iboTCp1b+1i5DSkIZTcwIktuDw== + +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-autocomplete-prompt@^1.0.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/inquirer-autocomplete-prompt/-/inquirer-autocomplete-prompt-1.4.0.tgz#e767592f747e3d5bb6336fe71fb4094352e4c317" + integrity sha512-qHgHyJmbULt4hI+kCmwX92MnSxDs/Yhdt4wPA30qnoa01OF6uTXV8yvH4hKXgdaTNmkZ9D01MHjqKYEuJN+ONw== + dependencies: + ansi-escapes "^4.3.1" + chalk "^4.0.0" + figures "^3.2.0" + run-async "^2.4.0" + rxjs "^6.6.2" + +inquirer-fuzzy-path@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/inquirer-fuzzy-path/-/inquirer-fuzzy-path-2.3.0.tgz#9bc51dc47d7d9c7eb53daac7fd7c9e615eb040c5" + integrity sha512-zfHC/97GSkxKKM7IctZM22x1sVi+FYBh9oaHTmI7Er/GKFpNykUgtviTmqqpiFQs5yJoSowxbT0PHy6N+H+QRg== + dependencies: + ansi-styles "^3.2.1" + fuzzy "^0.1.3" + inquirer "^6.0.0" + inquirer-autocomplete-prompt "^1.0.2" + strip-ansi "^4.0.0" + +inquirer@^6.0.0: + version "6.5.2" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca" + integrity sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ== + dependencies: + ansi-escapes "^3.2.0" + chalk "^2.4.2" + cli-cursor "^2.1.0" + cli-width "^2.0.0" + external-editor "^3.0.3" + figures "^2.0.0" + lodash "^4.17.12" + mute-stream "0.0.7" + run-async "^2.2.0" + rxjs "^6.4.0" + string-width "^2.1.0" + strip-ansi "^5.1.0" + through "^2.3.6" + +inquirer@^8.0.0: + version "8.2.6" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.6.tgz#733b74888195d8d400a67ac332011b5fae5ea562" + integrity sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg== + dependencies: + ansi-escapes "^4.2.1" + chalk "^4.1.1" + cli-cursor "^3.1.0" + cli-width "^3.0.0" + external-editor "^3.0.3" + figures "^3.0.0" + lodash "^4.17.21" + mute-stream "0.0.8" + ora "^5.4.1" + run-async "^2.4.0" + rxjs "^7.5.5" + string-width "^4.1.0" + strip-ansi "^6.0.0" + through "^2.3.6" + wrap-ansi "^6.0.1" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w== + +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" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-interactive@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" + integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== + +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +jackspeak@^3.1.2: + version "3.4.2" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.2.tgz#c3d1e00071d52dba8b0dac17cd2a12d0187d2989" + integrity sha512-qH3nOSj8q/8+Eg8LUPOq3C+6HWkpUioIjDsq1+D4zY91oZvpPttw8GwtF1nReRYKXl+1AORyFqtm2f5Q1SB6/Q== + dependencies: + "@isaacs/cliui" "^8.0.2" + optionalDependencies: + "@pkgjs/parseargs" "^0.11.0" + +lodash@^4.17.12, lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +log-symbols@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + +lru-cache@^10.2.0: + version "10.4.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" + integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== + +make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +mime-db@1.52.0: + version "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: + 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" + +mimic-fn@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +minimatch@^9.0.4: + version "9.0.5" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" + integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== + dependencies: + brace-expansion "^2.0.1" + +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" + integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== + +moment-timezone@^0.5.43: + version "0.5.45" + resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.45.tgz#cb685acd56bac10e69d93c536366eb65aa6bcf5c" + integrity sha512-HIWmqA86KcmCAhnMAN0wuDOARV/525R2+lOLotuGFzn4HO+FH+/645z2wx0Dt3iDv6/p61SIvKnDstISainhLQ== + dependencies: + moment "^2.29.4" + +moment@^2.29.4: + version "2.30.1" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.30.1.tgz#f8c91c07b7a786e30c59926df530b4eac96974ae" + integrity sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@^2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +mute-stream@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" + integrity sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ== + +mute-stream@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + +node-fetch@^2.6.12: + version "2.7.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== + dependencies: + whatwg-url "^5.0.0" + +onetime@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + integrity sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ== + dependencies: + mimic-fn "^1.0.0" + +onetime@^5.1.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +ora@^5.4.1: + version "5.4.1" + resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" + integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== + dependencies: + bl "^4.1.0" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-spinners "^2.5.0" + is-interactive "^1.0.0" + is-unicode-supported "^0.1.0" + log-symbols "^4.1.0" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" + +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== + +p-limit@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +package-json-from-dist@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz#e501cd3094b278495eb4258d4c9f6d5ac3019f00" + integrity sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw== + +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-scurry@^1.11.1: + version "1.11.1" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2" + integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== + dependencies: + lru-cache "^10.2.0" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + +pg-cloudflare@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/pg-cloudflare/-/pg-cloudflare-1.1.1.tgz#e6d5833015b170e23ae819e8c5d7eaedb472ca98" + integrity sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q== + +pg-connection-string@^2.6.1, pg-connection-string@^2.6.4: + version "2.6.4" + resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.6.4.tgz#f543862adfa49fa4e14bc8a8892d2a84d754246d" + integrity sha512-v+Z7W/0EO707aNMaAEfiGnGL9sxxumwLl2fJvCQtMn9Fxsg+lPpPkdcyBSv/KFgpGdYkMfn+EI1Or2EHjpgLCA== + +pg-int8@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/pg-int8/-/pg-int8-1.0.1.tgz#943bd463bf5b71b4170115f80f8efc9a0c0eb78c" + integrity sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw== + +pg-pool@^3.6.2: + version "3.6.2" + resolved "https://registry.yarnpkg.com/pg-pool/-/pg-pool-3.6.2.tgz#3a592370b8ae3f02a7c8130d245bc02fa2c5f3f2" + integrity sha512-Htjbg8BlwXqSBQ9V8Vjtc+vzf/6fVUuak/3/XXKA9oxZprwW3IMDQTGHP+KDmVL7rtd+R1QjbnCFPuTHm3G4hg== + +pg-protocol@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/pg-protocol/-/pg-protocol-1.6.1.tgz#21333e6d83b01faaebfe7a33a7ad6bfd9ed38cb3" + integrity sha512-jPIlvgoD63hrEuihvIg+tJhoGjUsLPn6poJY9N5CnlPd91c2T18T/9zBtLxZSb1EhYxBRoZJtzScCaWlYLtktg== + +pg-types@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/pg-types/-/pg-types-2.2.0.tgz#2d0250d636454f7cfa3b6ae0382fdfa8063254a3" + integrity sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA== + dependencies: + pg-int8 "1.0.1" + postgres-array "~2.0.0" + postgres-bytea "~1.0.0" + postgres-date "~1.0.4" + postgres-interval "^1.1.0" + +pg@^8.11.3: + version "8.12.0" + resolved "https://registry.yarnpkg.com/pg/-/pg-8.12.0.tgz#9341724db571022490b657908f65aee8db91df79" + integrity sha512-A+LHUSnwnxrnL/tZ+OLfqR1SxLN3c/pgDztZ47Rpbsd4jUytsTtwQo/TLPRzPJMp/1pbhYVhH9cuSZLAajNfjQ== + dependencies: + pg-connection-string "^2.6.4" + pg-pool "^3.6.2" + pg-protocol "^1.6.1" + pg-types "^2.1.0" + pgpass "1.x" + optionalDependencies: + pg-cloudflare "^1.1.1" + +pgpass@1.x: + version "1.0.5" + resolved "https://registry.yarnpkg.com/pgpass/-/pgpass-1.0.5.tgz#9b873e4a564bb10fa7a7dbd55312728d422a223d" + integrity sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug== + dependencies: + split2 "^4.1.0" + +postgres-array@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postgres-array/-/postgres-array-2.0.0.tgz#48f8fce054fbc69671999329b8834b772652d82e" + integrity sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA== + +postgres-bytea@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/postgres-bytea/-/postgres-bytea-1.0.0.tgz#027b533c0aa890e26d172d47cf9ccecc521acd35" + integrity sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w== + +postgres-date@~1.0.4: + version "1.0.7" + resolved "https://registry.yarnpkg.com/postgres-date/-/postgres-date-1.0.7.tgz#51bc086006005e5061c591cee727f2531bf641a8" + integrity sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q== + +postgres-interval@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/postgres-interval/-/postgres-interval-1.2.0.tgz#b460c82cb1587507788819a06aa0fffdb3544695" + integrity sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ== + dependencies: + xtend "^4.0.0" + +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== + +readable-stream@^3.4.0: + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +restore-cursor@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + integrity sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q== + dependencies: + onetime "^2.0.0" + signal-exit "^3.0.2" + +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + +retry-as-promised@^7.0.4: + version "7.0.4" + resolved "https://registry.yarnpkg.com/retry-as-promised/-/retry-as-promised-7.0.4.tgz#9df73adaeea08cb2948b9d34990549dc13d800a2" + integrity sha512-XgmCoxKWkDofwH8WddD0w85ZfqYz+ZHlr5yo+3YUCfycWawU56T5ckWXsScsj5B8tqUcIG67DxXByo3VUgiAdA== + +retry@0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" + integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== + +run-async@^2.2.0, run-async@^2.4.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" + integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== + +rxjs@^6.4.0, rxjs@^6.6.2: + version "6.6.7" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" + integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== + dependencies: + tslib "^1.9.0" + +rxjs@^7.5.5: + version "7.8.1" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" + integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== + dependencies: + tslib "^2.1.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== + +"safer-buffer@>= 2.1.2 < 3": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +secure-json-parse@^2.4.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/secure-json-parse/-/secure-json-parse-2.7.0.tgz#5a5f9cd6ae47df23dba3151edd06855d47e09862" + integrity sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw== + +semver@^7.5.4: + version "7.6.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.2.tgz#1e3b34759f896e8f14d6134732ce798aeb0c6e13" + integrity sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w== + +sequelize-pool@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/sequelize-pool/-/sequelize-pool-7.1.0.tgz#210b391af4002762f823188fd6ecfc7413020768" + integrity sha512-G9c0qlIWQSK29pR/5U2JF5dDQeqqHRragoyahj/Nx4KOOQ3CPPfzxnfqFPCSB7x5UgjOgnZ61nSxz+fjDpRlJg== + +sequelize@^6.36.0: + version "6.37.3" + resolved "https://registry.yarnpkg.com/sequelize/-/sequelize-6.37.3.tgz#ed6212029a52c59a18638d2a703da84bc2f81311" + integrity sha512-V2FTqYpdZjPy3VQrZvjTPnOoLm0KudCRXfGWp48QwhyPPp2yW8z0p0sCYZd/em847Tl2dVxJJ1DR+hF+O77T7A== + dependencies: + "@types/debug" "^4.1.8" + "@types/validator" "^13.7.17" + debug "^4.3.4" + dottie "^2.0.6" + inflection "^1.13.4" + lodash "^4.17.21" + moment "^2.29.4" + moment-timezone "^0.5.43" + pg-connection-string "^2.6.1" + retry-as-promised "^7.0.4" + semver "^7.5.4" + sequelize-pool "^7.1.0" + toposort-class "^1.0.1" + uuid "^8.3.2" + validator "^13.9.0" + wkx "^0.5.0" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +signal-exit@^3.0.2: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +signal-exit@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + +split2@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/split2/-/split2-4.2.0.tgz#c9c5920904d148bab0b9f67145f245a86aadbfa4" + integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== + +"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string-width@^5.0.1, string-width@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow== + dependencies: + ansi-regex "^3.0.0" + +strip-ansi@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + +strip-ansi@^7.0.1: + version "7.1.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" + integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== + dependencies: + ansi-regex "^6.0.1" + +strnum@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/strnum/-/strnum-1.0.5.tgz#5c4e829fe15ad4ff0d20c3db5ac97b73c9b072db" + integrity sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA== + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +through@^2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== + +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" + +toposort-class@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toposort-class/-/toposort-class-1.0.1.tgz#7ffd1f78c8be28c3ba45cd4e1a3f5ee193bd9988" + integrity sha512-OsLcGGbYF3rMjPUf8oKktyvCiUxSbqMMS39m33MAjLTC1DVIH6x3WSt63/M77ihI09+Sdfk1AXvfhCEeUmC7mg== + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +tron-format-address@^0.1.11: + version "0.1.11" + resolved "https://registry.yarnpkg.com/tron-format-address/-/tron-format-address-0.1.11.tgz#d4b345e4c62f6024976e764d37b2c30666142603" + integrity sha512-Jx2i3R1yXrEMQsfc2jueAI71ivnySzdeva6SiSM/pddwj8TK7PVABSP6s/iYcTRI63GxJEgGMmOJXNNKoBmbQw== + +ts-node@^10.9.1: + version "10.9.2" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.2.tgz#70f021c9e185bccdca820e26dc413805c101c71f" + integrity sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ== + dependencies: + "@cspotcode/source-map-support" "^0.8.0" + "@tsconfig/node10" "^1.0.7" + "@tsconfig/node12" "^1.0.7" + "@tsconfig/node14" "^1.0.0" + "@tsconfig/node16" "^1.0.2" + acorn "^8.4.1" + acorn-walk "^8.1.1" + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + v8-compile-cache-lib "^3.0.1" + yn "3.1.1" + +tslib@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" + integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== + +tslib@^1.9.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.1.0, tslib@^2.4.0, tslib@^2.6.2: + version "2.6.3" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.3.tgz#0438f810ad7a9edcde7a241c3d80db693c8cbfe0" + integrity sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ== + +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== + +typescript@^5.0.0: + version "5.5.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.5.3.tgz#e1b0a3c394190838a0b168e771b0ad56a0af0faa" + integrity sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ== + +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== + +undici@^6.12.0: + version "6.19.2" + resolved "https://registry.yarnpkg.com/undici/-/undici-6.19.2.tgz#231bc5de78d0dafb6260cf454b294576c2f3cd31" + integrity sha512-JfjKqIauur3Q6biAtHJ564e3bWa8VvT+7cSiOJHFbX4Erv6CLGDpg8z+Fmg/1OI/47RA+GI2QZaF48SSaLvyBA== + +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== + +uuid@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" + integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== + +v8-compile-cache-lib@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" + integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== + +validator@^13.9.0: + version "13.12.0" + resolved "https://registry.yarnpkg.com/validator/-/validator-13.12.0.tgz#7d78e76ba85504da3fee4fd1922b385914d4b35f" + integrity sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg== + +wcwidth@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== + dependencies: + defaults "^1.0.3" + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +wkx@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/wkx/-/wkx-0.5.0.tgz#c6c37019acf40e517cc6b94657a25a3d4aa33e8c" + integrity sha512-Xng/d4Ichh8uN4l0FToV/258EjMGU9MGcA0HV2d9B/ZpZB3lqQm7nkOdZdm5GhKtLLhAE7PiVQwN4eN+2YJJUg== + dependencies: + "@types/node" "*" + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^6.0.1: + 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@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" + integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== + dependencies: + ansi-styles "^6.1.0" + string-width "^5.0.1" + strip-ansi "^7.0.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== + +xtend@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +yn@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== From 0bb1cb1b6371be6438eb913e93fff67159bc5c9f Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 10 Jul 2024 14:48:01 +0000 Subject: [PATCH 010/105] fix surfone --- fees/surfone/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fees/surfone/index.ts b/fees/surfone/index.ts index 365fff81e4..ffc130e22a 100644 --- a/fees/surfone/index.ts +++ b/fees/surfone/index.ts @@ -21,7 +21,7 @@ const fetch = () => { const volume: IVolume = response.data; return { - dailyFees: `${volume?.total_fee || undefined}`, + totalFees: `${volume?.total_fee || undefined}`, timestamp: dayTimestamp, }; }; From 2c32fedfeec0ed3cf1bfb0380dc9d0d494b8c2ce Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 10 Jul 2024 15:00:33 +0000 Subject: [PATCH 011/105] fix fees --- fees/surfone/index.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/fees/surfone/index.ts b/fees/surfone/index.ts index ffc130e22a..7c209bc4fe 100644 --- a/fees/surfone/index.ts +++ b/fees/surfone/index.ts @@ -11,6 +11,7 @@ const headers = { }; interface IVolume { + '24h_vol': number, total_fee: number, } @@ -20,7 +21,9 @@ const fetch = () => { const response = (await httpGet(volumeEndpointV2, { headers })); const volume: IVolume = response.data; + const dailyFees = Number(volume['24h_vol'] || 0) * (0.1/100); // 0.1% of trade volume return { + dailyFees: `${dailyFees}`, totalFees: `${volume?.total_fee || undefined}`, timestamp: dayTimestamp, }; From baea2156d7ee8bb72086be113088df5c4ece0ea0 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 10 Jul 2024 15:19:58 +0000 Subject: [PATCH 012/105] disable op volume has spike --- fees/across.ts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/fees/across.ts b/fees/across.ts index 2af53f89fd..16b1a30e4a 100644 --- a/fees/across.ts +++ b/fees/across.ts @@ -41,7 +41,7 @@ const graph = (chain: Chain) => { target: address[chain], eventAbi: abis.FundsDeposited, topic: topic0_fund_disposit_v2, - fromBlock, + fromBlock, toBlock }) ).filter((a: any) => Number(a!.destinationChainId) === 288); @@ -51,7 +51,7 @@ const graph = (chain: Chain) => { target: address[chain], eventAbi: abis.V3FundsDeposited, topic: topic0_fund_disposit_v3, - fromBlock, + fromBlock, toBlock }) ).filter((a: any) => Number(a!.destinationChainId) === 288); @@ -68,7 +68,7 @@ const graph = (chain: Chain) => { target: address[chain], eventAbi: abis.FilledV3Relay, topic: topic0_filled_replay_v3, - fromBlock, + fromBlock, toBlock }); @@ -110,10 +110,10 @@ const adapter: SimpleAdapter = { fetch: graph(CHAIN.ARBITRUM), start: 1682840443, }, - [CHAIN.OPTIMISM]: { - fetch: graph(CHAIN.OPTIMISM), - start: 1682840443, - }, + // [CHAIN.OPTIMISM]: { + // fetch: graph(CHAIN.OPTIMISM), + // start: 1682840443, + // }, [CHAIN.POLYGON]: { fetch: graph(CHAIN.POLYGON), start: 1682840443, From a0f3c586fc2bcf0f666e6fd991e2d303510fdda9 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 10 Jul 2024 16:40:09 +0000 Subject: [PATCH 013/105] update swapgpt --- aggregators/swapgpt/index.ts | 60 +++++++++++------------------------- 1 file changed, 18 insertions(+), 42 deletions(-) diff --git a/aggregators/swapgpt/index.ts b/aggregators/swapgpt/index.ts index 115321d63a..60cccdccb4 100644 --- a/aggregators/swapgpt/index.ts +++ b/aggregators/swapgpt/index.ts @@ -1,60 +1,36 @@ -import fetchURL from "../../utils/fetchURL"; -import { SimpleAdapter } from "../../adapters/types"; +import { httpGet } from "../../utils/fetchURL"; +import { FetchOptions, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; interface IVolumeall { - startDateTime: string; - dailyVolumeUSD: string; + totalVolumeUSD: string; + dailyVolumeUSD: Array<{ + startDateTime: string; + dailyVolumeUSD: string; + }> } const baseUrl = "https://stats-api.panora.exchange"; const endpoint = "getDefiLlamaStats"; -const getStartOfDay = (timestamp: number) => { - const now = new Date(timestamp); - - const startOfDayUTC = new Date( - Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate()) - ); - - const startOfDayISO = startOfDayUTC.toISOString(); - - return startOfDayISO; -}; - -const fetch = async (timestamp: number) => { - const dayTimestamp = getStartOfDay(timestamp); - - const historicalVolume: IVolumeall[] = ( - await fetchURL(`${baseUrl}/${endpoint}`) - )?.dailyVolumeUSD; - - const totalVolume = historicalVolume - .filter( - (volItem) => - new Date(volItem.startDateTime)?.getTime() <= - new Date(dayTimestamp)?.getTime() - ) - .reduce((acc, { dailyVolumeUSD }) => acc + Number(dailyVolumeUSD), 0); - - const dailyVolume = historicalVolume.find( - (dayItem) => - new Date(dayItem.startDateTime)?.getTime() === - new Date(dayTimestamp)?.getTime() - )?.dailyVolumeUSD; - +const fetch = async (options: FetchOptions) => { + const timestamp = options.startOfDay + const dateStr = new Date(timestamp * 1000).toISOString().split('T')[0]; + const response: IVolumeall = (await httpGet(`${baseUrl}/${endpoint}`)); + const totalVolume = response.totalVolumeUSD; + const dailyVolume = response.dailyVolumeUSD.find((d) => d.startDateTime.split('T')[0] === dateStr); return { - totalVolume: String(totalVolume), - dailyVolume, - timestamp: new Date(dayTimestamp)?.getTime() / 1000, - }; + dailyVolume: dailyVolume?.dailyVolumeUSD, + totalVolume + } }; const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.APTOS]: { fetch, - start: new Date("2023-11-28T00:00:00.000Z").getTime() / 1000, + start: 1701129600, }, }, }; From 3a7faf24c05b2be24a0d5bafa1d2209fe2442a5a Mon Sep 17 00:00:00 2001 From: Strategic Reserve Date: Wed, 10 Jul 2024 13:39:53 -0700 Subject: [PATCH 014/105] Update Fees / order / new networks --- fees/gamma.ts | 94 +++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 69 insertions(+), 25 deletions(-) diff --git a/fees/gamma.ts b/fees/gamma.ts index f75c83a64a..b20791c627 100644 --- a/fees/gamma.ts +++ b/fees/gamma.ts @@ -58,23 +58,23 @@ const fetchFees = (chain: string) => { const adapter: SimpleAdapter = { adapter: { [CHAIN.ETHEREUM]: { - fetch: fetchFees(CHAIN.ETHEREUM), - start: 1682121600, - }, - [CHAIN.ARBITRUM]: { - fetch: fetchFees(CHAIN.ARBITRUM), + fetch: fetchFees("ethereum"), start: 1682121600, }, [CHAIN.POLYGON]: { - fetch: fetchFees(CHAIN.POLYGON), + fetch: fetchFees("polygon"), start: 1682121600, }, [CHAIN.POLYGON_ZKEVM]: { - fetch: fetchFees(CHAIN.POLYGON_ZKEVM), + fetch: fetchFees("polygon_zkevm"), start: 1682121600, }, [CHAIN.OPTIMISM]: { - fetch: fetchFees(CHAIN.OPTIMISM), + fetch: fetchFees("optimism"), + start: 1682121600, + }, + [CHAIN.ARBITRUM]: { + fetch: fetchFees("arbitrum"), start: 1682121600, }, [CHAIN.BSC]: { @@ -85,50 +85,94 @@ const adapter: SimpleAdapter = { fetch: fetchFees("moonbeam"), start: 1682121600, }, + [CHAIN.CELO]: { + fetch: fetchFees("celo"), + start: 1682121600, + }, + [CHAIN.AVAX]: { + fetch: fetchFees("avalanche"), + start: 1682121600, + }, + [CHAIN.FANTOM]: { + fetch: fetchFees("fantom"), + start: 1682121600, + }, + [CHAIN.MANTLE]: { + fetch: fetchFees("mantle"), + start: 1682121600, + }, [CHAIN.ROLLUX]: { - fetch: fetchFees(CHAIN.ROLLUX), + fetch: fetchFees("rollux"), start: 1682121600, }, [CHAIN.LINEA]: { - fetch: fetchFees(CHAIN.LINEA), + fetch: fetchFees("linea"), start: 1682121600, }, - [CHAIN.MANTA]: { - fetch: fetchFees("manta"), + [CHAIN.BASE]: { + fetch: fetchFees("base"), start: 1682121600, }, - [CHAIN.AVAX]: { - fetch: fetchFees("avalanche"), + [CHAIN.KAVA]: { + fetch: fetchFees("kava"), start: 1682121600, }, - [CHAIN.XDAI]: { - fetch: fetchFees("gnosis"), + [CHAIN.OP_BNB]: { + fetch: fetchFees("op_bnb"), start: 1682121600, }, - [CHAIN.MANTLE]: { - fetch: fetchFees("mantle"), + [CHAIN.MANTA]: { + fetch: fetchFees("manta"), start: 1682121600, }, - [CHAIN.CELO]: { - fetch: fetchFees("celo"), + [CHAIN.METIS]: { + fetch: fetchFees("metis"), start: 1682121600, }, - [CHAIN.METIS]: { - fetch: fetchFees("metis"), + [CHAIN.XDAI]: { + fetch: fetchFees("gnosis"), + start: 1682121600, + }, + [CHAIN.ASTRZK]: { + fetch: fetchFees("astar_zkevm"), start: 1682121600, }, [CHAIN.IMX]: { fetch: fetchFees("immutable_zkevm"), start: 1682121600, }, - [CHAIN.ASTRZK]: { - fetch: fetchFees("astar_zkevm"), + [CHAIN.SCROLL]: { + fetch: fetchFees("scroll"), start: 1682121600, }, - [CHAIN.BLAST]: { + [CHAIN.BLAST]: { fetch: fetchFees("blast"), start: 1682121600, }, + [CHAIN.XLAYER]: { + fetch: fetchFees("xlayer"), + start: 1682121600, + }, + [CHAIN.MODE]: { + fetch: fetchFees("mode"), + start: 1682121600, + }, + [CHAIN.TAIKO]: { + fetch: fetchFees("taiko"), + start: 1682121600, + }, + [CHAIN.RSK]: { + fetch: fetchFees("rootstock"), + start: 1682121600, + }, + [CHAIN.SEI]: { + fetch: fetchFees("sei"), + start: 1682121600, + }, + [CHAIN.IOTAEVM]: { + fetch: fetchFees("iota_evm"), + start: 1682121600, + }, } } From 695d4f65c6e3c9c6ab3a8386cff502ebe5cd2bf2 Mon Sep 17 00:00:00 2001 From: degencreator <156078277+degencreator@users.noreply.github.com> Date: Wed, 10 Jul 2024 23:54:21 +0200 Subject: [PATCH 015/105] fix: Removed yarn lock --- yarn.lock | 2440 ----------------------------------------------------- 1 file changed, 2440 deletions(-) delete mode 100644 yarn.lock diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index b2f9b21617..0000000000 --- a/yarn.lock +++ /dev/null @@ -1,2440 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@adraffy/ens-normalize@1.10.1": - version "1.10.1" - resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz#63430d04bd8c5e74f8d7d049338f1cd9d4f02069" - integrity sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw== - -"@aws-crypto/crc32@5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/crc32/-/crc32-5.2.0.tgz#cfcc22570949c98c6689cfcbd2d693d36cdae2e1" - integrity sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg== - dependencies: - "@aws-crypto/util" "^5.2.0" - "@aws-sdk/types" "^3.222.0" - tslib "^2.6.2" - -"@aws-crypto/crc32c@5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/crc32c/-/crc32c-5.2.0.tgz#4e34aab7f419307821509a98b9b08e84e0c1917e" - integrity sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag== - dependencies: - "@aws-crypto/util" "^5.2.0" - "@aws-sdk/types" "^3.222.0" - tslib "^2.6.2" - -"@aws-crypto/sha1-browser@5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/sha1-browser/-/sha1-browser-5.2.0.tgz#b0ee2d2821d3861f017e965ef3b4cb38e3b6a0f4" - integrity sha512-OH6lveCFfcDjX4dbAvCFSYUjJZjDr/3XJ3xHtjn3Oj5b9RjojQo8npoLeA/bNwkOkrSQ0wgrHzXk4tDRxGKJeg== - dependencies: - "@aws-crypto/supports-web-crypto" "^5.2.0" - "@aws-crypto/util" "^5.2.0" - "@aws-sdk/types" "^3.222.0" - "@aws-sdk/util-locate-window" "^3.0.0" - "@smithy/util-utf8" "^2.0.0" - tslib "^2.6.2" - -"@aws-crypto/sha256-browser@5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz#153895ef1dba6f9fce38af550e0ef58988eb649e" - integrity sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw== - dependencies: - "@aws-crypto/sha256-js" "^5.2.0" - "@aws-crypto/supports-web-crypto" "^5.2.0" - "@aws-crypto/util" "^5.2.0" - "@aws-sdk/types" "^3.222.0" - "@aws-sdk/util-locate-window" "^3.0.0" - "@smithy/util-utf8" "^2.0.0" - tslib "^2.6.2" - -"@aws-crypto/sha256-js@5.2.0", "@aws-crypto/sha256-js@^5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz#c4fdb773fdbed9a664fc1a95724e206cf3860042" - integrity sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA== - dependencies: - "@aws-crypto/util" "^5.2.0" - "@aws-sdk/types" "^3.222.0" - tslib "^2.6.2" - -"@aws-crypto/supports-web-crypto@^5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz#a1e399af29269be08e695109aa15da0a07b5b5fb" - integrity sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg== - dependencies: - tslib "^2.6.2" - -"@aws-crypto/util@^5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/util/-/util-5.2.0.tgz#71284c9cffe7927ddadac793c14f14886d3876da" - integrity sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ== - dependencies: - "@aws-sdk/types" "^3.222.0" - "@smithy/util-utf8" "^2.0.0" - tslib "^2.6.2" - -"@aws-sdk/client-s3@^3.400.0": - version "3.613.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.613.0.tgz#780731af58c67f61aadb86a86f8896e0f3465973" - integrity sha512-JK0yjzZFa+/qVZawHasCG4yEEA7ITpBtNsn9ri7qUZDfSWxDDJpKgHI/ZWd4QXw3SLlBG9hoj+eNSroJXuv+hQ== - dependencies: - "@aws-crypto/sha1-browser" "5.2.0" - "@aws-crypto/sha256-browser" "5.2.0" - "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/client-sso-oidc" "3.613.0" - "@aws-sdk/client-sts" "3.613.0" - "@aws-sdk/core" "3.609.0" - "@aws-sdk/credential-provider-node" "3.613.0" - "@aws-sdk/middleware-bucket-endpoint" "3.609.0" - "@aws-sdk/middleware-expect-continue" "3.609.0" - "@aws-sdk/middleware-flexible-checksums" "3.609.0" - "@aws-sdk/middleware-host-header" "3.609.0" - "@aws-sdk/middleware-location-constraint" "3.609.0" - "@aws-sdk/middleware-logger" "3.609.0" - "@aws-sdk/middleware-recursion-detection" "3.609.0" - "@aws-sdk/middleware-sdk-s3" "3.609.0" - "@aws-sdk/middleware-signing" "3.609.0" - "@aws-sdk/middleware-ssec" "3.609.0" - "@aws-sdk/middleware-user-agent" "3.609.0" - "@aws-sdk/region-config-resolver" "3.609.0" - "@aws-sdk/signature-v4-multi-region" "3.609.0" - "@aws-sdk/types" "3.609.0" - "@aws-sdk/util-endpoints" "3.609.0" - "@aws-sdk/util-user-agent-browser" "3.609.0" - "@aws-sdk/util-user-agent-node" "3.609.0" - "@aws-sdk/xml-builder" "3.609.0" - "@smithy/config-resolver" "^3.0.4" - "@smithy/core" "^2.2.4" - "@smithy/eventstream-serde-browser" "^3.0.4" - "@smithy/eventstream-serde-config-resolver" "^3.0.3" - "@smithy/eventstream-serde-node" "^3.0.4" - "@smithy/fetch-http-handler" "^3.2.0" - "@smithy/hash-blob-browser" "^3.1.2" - "@smithy/hash-node" "^3.0.3" - "@smithy/hash-stream-node" "^3.1.2" - "@smithy/invalid-dependency" "^3.0.3" - "@smithy/md5-js" "^3.0.3" - "@smithy/middleware-content-length" "^3.0.3" - "@smithy/middleware-endpoint" "^3.0.4" - "@smithy/middleware-retry" "^3.0.7" - "@smithy/middleware-serde" "^3.0.3" - "@smithy/middleware-stack" "^3.0.3" - "@smithy/node-config-provider" "^3.1.3" - "@smithy/node-http-handler" "^3.1.1" - "@smithy/protocol-http" "^4.0.3" - "@smithy/smithy-client" "^3.1.5" - "@smithy/types" "^3.3.0" - "@smithy/url-parser" "^3.0.3" - "@smithy/util-base64" "^3.0.0" - "@smithy/util-body-length-browser" "^3.0.0" - "@smithy/util-body-length-node" "^3.0.0" - "@smithy/util-defaults-mode-browser" "^3.0.7" - "@smithy/util-defaults-mode-node" "^3.0.7" - "@smithy/util-endpoints" "^2.0.4" - "@smithy/util-retry" "^3.0.3" - "@smithy/util-stream" "^3.0.5" - "@smithy/util-utf8" "^3.0.0" - "@smithy/util-waiter" "^3.1.2" - tslib "^2.6.2" - -"@aws-sdk/client-sso-oidc@3.613.0": - version "3.613.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.613.0.tgz#1c98f0fb1254692a9884534aa73c74cff04034e5" - integrity sha512-VINgHA30f6Itjtj6ZAxkx86XhyFYa7UBfv2Ju+9QGcAr2Y3HU+Mh9g6QaTwDqIM5QG6Pgss24NaAItWGJHFf5A== - dependencies: - "@aws-crypto/sha256-browser" "5.2.0" - "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/core" "3.609.0" - "@aws-sdk/credential-provider-node" "3.613.0" - "@aws-sdk/middleware-host-header" "3.609.0" - "@aws-sdk/middleware-logger" "3.609.0" - "@aws-sdk/middleware-recursion-detection" "3.609.0" - "@aws-sdk/middleware-user-agent" "3.609.0" - "@aws-sdk/region-config-resolver" "3.609.0" - "@aws-sdk/types" "3.609.0" - "@aws-sdk/util-endpoints" "3.609.0" - "@aws-sdk/util-user-agent-browser" "3.609.0" - "@aws-sdk/util-user-agent-node" "3.609.0" - "@smithy/config-resolver" "^3.0.4" - "@smithy/core" "^2.2.4" - "@smithy/fetch-http-handler" "^3.2.0" - "@smithy/hash-node" "^3.0.3" - "@smithy/invalid-dependency" "^3.0.3" - "@smithy/middleware-content-length" "^3.0.3" - "@smithy/middleware-endpoint" "^3.0.4" - "@smithy/middleware-retry" "^3.0.7" - "@smithy/middleware-serde" "^3.0.3" - "@smithy/middleware-stack" "^3.0.3" - "@smithy/node-config-provider" "^3.1.3" - "@smithy/node-http-handler" "^3.1.1" - "@smithy/protocol-http" "^4.0.3" - "@smithy/smithy-client" "^3.1.5" - "@smithy/types" "^3.3.0" - "@smithy/url-parser" "^3.0.3" - "@smithy/util-base64" "^3.0.0" - "@smithy/util-body-length-browser" "^3.0.0" - "@smithy/util-body-length-node" "^3.0.0" - "@smithy/util-defaults-mode-browser" "^3.0.7" - "@smithy/util-defaults-mode-node" "^3.0.7" - "@smithy/util-endpoints" "^2.0.4" - "@smithy/util-middleware" "^3.0.3" - "@smithy/util-retry" "^3.0.3" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/client-sso@3.609.0": - version "3.609.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.609.0.tgz#2a99166694b64947ba5b7453f057772bd3bba5b8" - integrity sha512-gqXGFDkIpKHCKAbeJK4aIDt3tiwJ26Rf5Tqw9JS6BYXsdMeOB8FTzqD9R+Yc1epHd8s5L94sdqXT5PapgxFZrg== - dependencies: - "@aws-crypto/sha256-browser" "5.2.0" - "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/core" "3.609.0" - "@aws-sdk/middleware-host-header" "3.609.0" - "@aws-sdk/middleware-logger" "3.609.0" - "@aws-sdk/middleware-recursion-detection" "3.609.0" - "@aws-sdk/middleware-user-agent" "3.609.0" - "@aws-sdk/region-config-resolver" "3.609.0" - "@aws-sdk/types" "3.609.0" - "@aws-sdk/util-endpoints" "3.609.0" - "@aws-sdk/util-user-agent-browser" "3.609.0" - "@aws-sdk/util-user-agent-node" "3.609.0" - "@smithy/config-resolver" "^3.0.4" - "@smithy/core" "^2.2.4" - "@smithy/fetch-http-handler" "^3.2.0" - "@smithy/hash-node" "^3.0.3" - "@smithy/invalid-dependency" "^3.0.3" - "@smithy/middleware-content-length" "^3.0.3" - "@smithy/middleware-endpoint" "^3.0.4" - "@smithy/middleware-retry" "^3.0.7" - "@smithy/middleware-serde" "^3.0.3" - "@smithy/middleware-stack" "^3.0.3" - "@smithy/node-config-provider" "^3.1.3" - "@smithy/node-http-handler" "^3.1.1" - "@smithy/protocol-http" "^4.0.3" - "@smithy/smithy-client" "^3.1.5" - "@smithy/types" "^3.3.0" - "@smithy/url-parser" "^3.0.3" - "@smithy/util-base64" "^3.0.0" - "@smithy/util-body-length-browser" "^3.0.0" - "@smithy/util-body-length-node" "^3.0.0" - "@smithy/util-defaults-mode-browser" "^3.0.7" - "@smithy/util-defaults-mode-node" "^3.0.7" - "@smithy/util-endpoints" "^2.0.4" - "@smithy/util-middleware" "^3.0.3" - "@smithy/util-retry" "^3.0.3" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/client-sts@3.613.0": - version "3.613.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.613.0.tgz#b648592d79dba0d4badaeacb4f33b3a2b158d0ca" - integrity sha512-S+KvQI4XEivY3vyIY+IPY7Fw8vFvX/q3pkNC9qEhnAs+/w7vT6vhVBHsaugYVlsMuNtNvmyc8P+Q/gzOEtLCTw== - dependencies: - "@aws-crypto/sha256-browser" "5.2.0" - "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/client-sso-oidc" "3.613.0" - "@aws-sdk/core" "3.609.0" - "@aws-sdk/credential-provider-node" "3.613.0" - "@aws-sdk/middleware-host-header" "3.609.0" - "@aws-sdk/middleware-logger" "3.609.0" - "@aws-sdk/middleware-recursion-detection" "3.609.0" - "@aws-sdk/middleware-user-agent" "3.609.0" - "@aws-sdk/region-config-resolver" "3.609.0" - "@aws-sdk/types" "3.609.0" - "@aws-sdk/util-endpoints" "3.609.0" - "@aws-sdk/util-user-agent-browser" "3.609.0" - "@aws-sdk/util-user-agent-node" "3.609.0" - "@smithy/config-resolver" "^3.0.4" - "@smithy/core" "^2.2.4" - "@smithy/fetch-http-handler" "^3.2.0" - "@smithy/hash-node" "^3.0.3" - "@smithy/invalid-dependency" "^3.0.3" - "@smithy/middleware-content-length" "^3.0.3" - "@smithy/middleware-endpoint" "^3.0.4" - "@smithy/middleware-retry" "^3.0.7" - "@smithy/middleware-serde" "^3.0.3" - "@smithy/middleware-stack" "^3.0.3" - "@smithy/node-config-provider" "^3.1.3" - "@smithy/node-http-handler" "^3.1.1" - "@smithy/protocol-http" "^4.0.3" - "@smithy/smithy-client" "^3.1.5" - "@smithy/types" "^3.3.0" - "@smithy/url-parser" "^3.0.3" - "@smithy/util-base64" "^3.0.0" - "@smithy/util-body-length-browser" "^3.0.0" - "@smithy/util-body-length-node" "^3.0.0" - "@smithy/util-defaults-mode-browser" "^3.0.7" - "@smithy/util-defaults-mode-node" "^3.0.7" - "@smithy/util-endpoints" "^2.0.4" - "@smithy/util-middleware" "^3.0.3" - "@smithy/util-retry" "^3.0.3" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/core@3.609.0": - version "3.609.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.609.0.tgz#4c3994cd341452d1ef1a8b5e81a16442a7422287" - integrity sha512-ptqw+DTxLr01+pKjDUuo53SEDzI+7nFM3WfQaEo0yhDg8vWw8PER4sWj1Ysx67ksctnZesPUjqxd5SHbtdBxiA== - dependencies: - "@smithy/core" "^2.2.4" - "@smithy/protocol-http" "^4.0.3" - "@smithy/signature-v4" "^3.1.2" - "@smithy/smithy-client" "^3.1.5" - "@smithy/types" "^3.3.0" - fast-xml-parser "4.2.5" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-env@3.609.0": - version "3.609.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.609.0.tgz#b3f32e5a8ff8b541e151eadadfb60283aa3d835e" - integrity sha512-v69ZCWcec2iuV9vLVJMa6fAb5xwkzN4jYIT8yjo2c4Ia/j976Q+TPf35Pnz5My48Xr94EFcaBazrWedF+kwfuQ== - dependencies: - "@aws-sdk/types" "3.609.0" - "@smithy/property-provider" "^3.1.3" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-http@3.613.0": - version "3.613.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.613.0.tgz#bb7987f8f78bc3372c56aadb52e5ac965bf168ad" - integrity sha512-MCiUFxowFzprzIXFXsqbp/3DViJ7nFmBW+XJkoRQWqNmThbkz/E8sb40WmL9UFdZHJph2KDjzABKYH5f0lHZaA== - dependencies: - "@aws-sdk/types" "3.609.0" - "@smithy/fetch-http-handler" "^3.2.0" - "@smithy/node-http-handler" "^3.1.1" - "@smithy/property-provider" "^3.1.3" - "@smithy/protocol-http" "^4.0.3" - "@smithy/smithy-client" "^3.1.5" - "@smithy/types" "^3.3.0" - "@smithy/util-stream" "^3.0.5" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-ini@3.613.0": - version "3.613.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.613.0.tgz#11736835f330571d15d240bc6d7812c826d845b0" - integrity sha512-scHV7K0YpllYMWxPnqxssWU+7S3WNXH1m5Rw8Ax96pfcfnaoatiWXps2XSSdGlChdF9gNVnewjRKFOTLyyzdAw== - dependencies: - "@aws-sdk/credential-provider-env" "3.609.0" - "@aws-sdk/credential-provider-http" "3.613.0" - "@aws-sdk/credential-provider-process" "3.609.0" - "@aws-sdk/credential-provider-sso" "3.609.0" - "@aws-sdk/credential-provider-web-identity" "3.609.0" - "@aws-sdk/types" "3.609.0" - "@smithy/credential-provider-imds" "^3.1.3" - "@smithy/property-provider" "^3.1.3" - "@smithy/shared-ini-file-loader" "^3.1.3" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-node@3.613.0": - version "3.613.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.613.0.tgz#9d9a03658e9b5e657fd3b75955e58971d62c2e0c" - integrity sha512-n3yd0CDuUKcQFhjRLAQfQpZyZ2ddrHC7QOKQqE+Fkx+Fs5zoG+NRLK1EBkBW/G9zk8Ck4+rG3OOI3CuNpJ2PCw== - dependencies: - "@aws-sdk/credential-provider-env" "3.609.0" - "@aws-sdk/credential-provider-http" "3.613.0" - "@aws-sdk/credential-provider-ini" "3.613.0" - "@aws-sdk/credential-provider-process" "3.609.0" - "@aws-sdk/credential-provider-sso" "3.609.0" - "@aws-sdk/credential-provider-web-identity" "3.609.0" - "@aws-sdk/types" "3.609.0" - "@smithy/credential-provider-imds" "^3.1.3" - "@smithy/property-provider" "^3.1.3" - "@smithy/shared-ini-file-loader" "^3.1.3" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-process@3.609.0": - version "3.609.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.609.0.tgz#2bfa160eec4be8532a45061810466ee3462ce240" - integrity sha512-Ux35nGOSJKZWUIM3Ny0ROZ8cqPRUEkh+tR3X2o9ydEbFiLq3eMMyEnHJqx4EeUjLRchidlm4CCid9GxMe5/gdw== - dependencies: - "@aws-sdk/types" "3.609.0" - "@smithy/property-provider" "^3.1.3" - "@smithy/shared-ini-file-loader" "^3.1.3" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-sso@3.609.0": - version "3.609.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.609.0.tgz#94da403a000060700a34ee62fcf119fd4cacf167" - integrity sha512-oQPGDKMMIxjvTcm86g07RPYeC7mCNk+29dPpY15ZAPRpAF7F0tircsC3wT9fHzNaKShEyK5LuI5Kg/uxsdy+Iw== - dependencies: - "@aws-sdk/client-sso" "3.609.0" - "@aws-sdk/token-providers" "3.609.0" - "@aws-sdk/types" "3.609.0" - "@smithy/property-provider" "^3.1.3" - "@smithy/shared-ini-file-loader" "^3.1.3" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-web-identity@3.609.0": - version "3.609.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.609.0.tgz#d29222d6894347ee89c781ea090d388656df1d2a" - integrity sha512-U+PG8NhlYYF45zbr1km3ROtBMYqyyj/oK8NRp++UHHeuavgrP+4wJ4wQnlEaKvJBjevfo3+dlIBcaeQ7NYejWg== - dependencies: - "@aws-sdk/types" "3.609.0" - "@smithy/property-provider" "^3.1.3" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-bucket-endpoint@3.609.0": - version "3.609.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.609.0.tgz#f6f1e366c1816292d6e78866653c6e7122b7932f" - integrity sha512-QhHRfr4e7FqaMUAnOAFdQVOR3yDLw40i1IZPo+TeiKyev9LEyYEX2l6DbdaIwAztofOpAxfFNj/IJ0V/efzz/w== - dependencies: - "@aws-sdk/types" "3.609.0" - "@aws-sdk/util-arn-parser" "3.568.0" - "@smithy/node-config-provider" "^3.1.3" - "@smithy/protocol-http" "^4.0.3" - "@smithy/types" "^3.3.0" - "@smithy/util-config-provider" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-expect-continue@3.609.0": - version "3.609.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.609.0.tgz#89af76f115aa5fadd5a82fe4e95a64cb15150517" - integrity sha512-+zeg//mSer4JZRxOB/4mUOMUJyuYPwATnIC5moBB8P8Xe+mJaVRFy8qlCtzYNj2TycnlsBPzTK0j7P1yvDh97w== - dependencies: - "@aws-sdk/types" "3.609.0" - "@smithy/protocol-http" "^4.0.3" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-flexible-checksums@3.609.0": - version "3.609.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.609.0.tgz#3bcd54d64e65808f2053d5a38053625cacb5464a" - integrity sha512-TJ4WE+ehT+qcrhr7/yJCzmJJPmUoPPWIbCnFzqGxauH/dpVBCslmd1vZg3h2VnfRiaDkc6f68dqYVc29CaurhQ== - dependencies: - "@aws-crypto/crc32" "5.2.0" - "@aws-crypto/crc32c" "5.2.0" - "@aws-sdk/types" "3.609.0" - "@smithy/is-array-buffer" "^3.0.0" - "@smithy/protocol-http" "^4.0.3" - "@smithy/types" "^3.3.0" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-host-header@3.609.0": - version "3.609.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.609.0.tgz#844302cb905e4d09b9a1ea4bfa96729833068913" - integrity sha512-iTKfo158lc4jLDfYeZmYMIBHsn8m6zX+XB6birCSNZ/rrlzAkPbGE43CNdKfvjyWdqgLMRXF+B+OcZRvqhMXPQ== - dependencies: - "@aws-sdk/types" "3.609.0" - "@smithy/protocol-http" "^4.0.3" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-location-constraint@3.609.0": - version "3.609.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.609.0.tgz#7ed82d71e5ddcd50683ef2bbde10d1cc2492057e" - integrity sha512-xzsdoTkszGVqGVPjUmgoP7TORiByLueMHieI1fhQL888WPdqctwAx3ES6d/bA9Q/i8jnc6hs+Fjhy8UvBTkE9A== - dependencies: - "@aws-sdk/types" "3.609.0" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-logger@3.609.0": - version "3.609.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.609.0.tgz#ed44d201f091b8bac908cbf14724c7a4d492553f" - integrity sha512-S62U2dy4jMDhDFDK5gZ4VxFdWzCtLzwbYyFZx2uvPYTECkepLUfzLic2BHg2Qvtu4QjX+oGE3P/7fwaGIsGNuQ== - dependencies: - "@aws-sdk/types" "3.609.0" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-recursion-detection@3.609.0": - version "3.609.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.609.0.tgz#b7b869aaeac021a43dbea1435eaea81e5d2460b1" - integrity sha512-6sewsYB7/o/nbUfA99Aa/LokM+a/u4Wpm/X2o0RxOsDtSB795ObebLJe2BxY5UssbGaWkn7LswyfvrdZNXNj1w== - dependencies: - "@aws-sdk/types" "3.609.0" - "@smithy/protocol-http" "^4.0.3" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-sdk-s3@3.609.0": - version "3.609.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.609.0.tgz#a743bd63adf786c7c6d4b9102946b67a5032d1f4" - integrity sha512-kvwjL6OJFhAGWoYaIWR7HmILjiVk6xVj6QEU6qZMA7FtGgvlKi4pLfs8Of+hQqo+2TEhUoxG/5t6WqwB8uxjsw== - dependencies: - "@aws-sdk/types" "3.609.0" - "@aws-sdk/util-arn-parser" "3.568.0" - "@smithy/node-config-provider" "^3.1.3" - "@smithy/protocol-http" "^4.0.3" - "@smithy/signature-v4" "^3.1.2" - "@smithy/smithy-client" "^3.1.5" - "@smithy/types" "^3.3.0" - "@smithy/util-config-provider" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-signing@3.609.0": - version "3.609.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-signing/-/middleware-signing-3.609.0.tgz#7e5c4e70302bf87a7aa3dfde83ec1b387bf819f0" - integrity sha512-2w3dBLjQVKIajYzokO4hduq8/0hSMUYHHmIo1Kdl+MSY8uwRBt12bLL6pyreobTcRMxizvn2ph/CQ9I1ST/WGQ== - dependencies: - "@aws-sdk/types" "3.609.0" - "@smithy/property-provider" "^3.1.3" - "@smithy/protocol-http" "^4.0.3" - "@smithy/signature-v4" "^3.1.2" - "@smithy/types" "^3.3.0" - "@smithy/util-middleware" "^3.0.3" - tslib "^2.6.2" - -"@aws-sdk/middleware-ssec@3.609.0": - version "3.609.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-ssec/-/middleware-ssec-3.609.0.tgz#b87a8bc6133f3f6bdc6801183d0f9dad3f93cf9f" - integrity sha512-GZSD1s7+JswWOTamVap79QiDaIV7byJFssBW68GYjyRS5EBjNfwA/8s+6uE6g39R3ojyTbYOmvcANoZEhSULXg== - dependencies: - "@aws-sdk/types" "3.609.0" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-user-agent@3.609.0": - version "3.609.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.609.0.tgz#eb3b7c604817be42f7ecd97988dda69a22e6011b" - integrity sha512-nbq7MXRmeXm4IDqh+sJRAxGPAq0OfGmGIwKvJcw66hLoG8CmhhVMZmIAEBDFr57S+YajGwnLLRt+eMI05MMeVA== - dependencies: - "@aws-sdk/types" "3.609.0" - "@aws-sdk/util-endpoints" "3.609.0" - "@smithy/protocol-http" "^4.0.3" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@aws-sdk/region-config-resolver@3.609.0": - version "3.609.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.609.0.tgz#68fe568d1c69f35f7fa3d66f718bd5751b1debda" - integrity sha512-lMHBG8zg9GWYBc9/XVPKyuAUd7iKqfPP7z04zGta2kGNOKbUTeqmAdc1gJGku75p4kglIPlGBorOxti8DhRmKw== - dependencies: - "@aws-sdk/types" "3.609.0" - "@smithy/node-config-provider" "^3.1.3" - "@smithy/types" "^3.3.0" - "@smithy/util-config-provider" "^3.0.0" - "@smithy/util-middleware" "^3.0.3" - tslib "^2.6.2" - -"@aws-sdk/signature-v4-multi-region@3.609.0": - version "3.609.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.609.0.tgz#c88c4a25713bd50b7b253d611e3d2473258087eb" - integrity sha512-FJs0BxVMyYOKNu7nzFI1kehfgWoYmdto5B8BSS29geUACF7jlOoeCfNZWVrnMjvAxVlSQ5O7Mr575932BnsycA== - dependencies: - "@aws-sdk/middleware-sdk-s3" "3.609.0" - "@aws-sdk/types" "3.609.0" - "@smithy/protocol-http" "^4.0.3" - "@smithy/signature-v4" "^3.1.2" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@aws-sdk/token-providers@3.609.0": - version "3.609.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.609.0.tgz#cfa9cdc84fefe71277c7d44b08b09f42c16c1d66" - integrity sha512-WvhW/7XSf+H7YmtiIigQxfDVZVZI7mbKikQ09YpzN7FeN3TmYib1+0tB+EE9TbICkwssjiFc71FEBEh4K9grKQ== - dependencies: - "@aws-sdk/types" "3.609.0" - "@smithy/property-provider" "^3.1.3" - "@smithy/shared-ini-file-loader" "^3.1.3" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@aws-sdk/types@3.609.0", "@aws-sdk/types@^3.222.0": - version "3.609.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.609.0.tgz#06b39d799c9f197a7b43670243e8e78a3bf7d6a5" - integrity sha512-+Tqnh9w0h2LcrUsdXyT1F8mNhXz+tVYBtP19LpeEGntmvHwa2XzvLUCWpoIAIVsHp5+HdB2X9Sn0KAtmbFXc2Q== - dependencies: - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@aws-sdk/util-arn-parser@3.568.0": - version "3.568.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-arn-parser/-/util-arn-parser-3.568.0.tgz#6a19a8c6bbaa520b6be1c278b2b8c17875b91527" - integrity sha512-XUKJWWo+KOB7fbnPP0+g/o5Ulku/X53t7i/h+sPHr5xxYTJJ9CYnbToo95mzxe7xWvkLrsNtJ8L+MnNn9INs2w== - dependencies: - tslib "^2.6.2" - -"@aws-sdk/util-endpoints@3.609.0": - version "3.609.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.609.0.tgz#e02d3fce2f999d750828dacf9f37289a1a48f6c9" - integrity sha512-Rh+3V8dOvEeE1aQmUy904DYWtLUEJ7Vf5XBPlQ6At3pBhp+zpXbsnpZzVL33c8lW1xfj6YPwtO6gOeEsl1juCQ== - dependencies: - "@aws-sdk/types" "3.609.0" - "@smithy/types" "^3.3.0" - "@smithy/util-endpoints" "^2.0.4" - tslib "^2.6.2" - -"@aws-sdk/util-locate-window@^3.0.0": - version "3.568.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-locate-window/-/util-locate-window-3.568.0.tgz#2acc4b2236af0d7494f7e517401ba6b3c4af11ff" - integrity sha512-3nh4TINkXYr+H41QaPelCceEB2FXP3fxp93YZXB/kqJvX0U9j0N0Uk45gvsjmEPzG8XxkPEeLIfT2I1M7A6Lig== - dependencies: - tslib "^2.6.2" - -"@aws-sdk/util-user-agent-browser@3.609.0": - version "3.609.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.609.0.tgz#aa15421b2e32ae8bc589dac2bd6e8969832ce588" - integrity sha512-fojPU+mNahzQ0YHYBsx0ZIhmMA96H+ZIZ665ObU9tl+SGdbLneVZVikGve+NmHTQwHzwkFsZYYnVKAkreJLAtA== - dependencies: - "@aws-sdk/types" "3.609.0" - "@smithy/types" "^3.3.0" - bowser "^2.11.0" - tslib "^2.6.2" - -"@aws-sdk/util-user-agent-node@3.609.0": - version "3.609.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.609.0.tgz#f8270517b2961cbf627e4e8fb6338ad153db44bb" - integrity sha512-DlZBwQ/HkZyf3pOWc7+wjJRk5R7x9YxHhs2szHwtv1IW30KMabjjjX0GMlGJ9LLkBHkbaaEY/w9Tkj12XRLhRg== - dependencies: - "@aws-sdk/types" "3.609.0" - "@smithy/node-config-provider" "^3.1.3" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@aws-sdk/xml-builder@3.609.0": - version "3.609.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/xml-builder/-/xml-builder-3.609.0.tgz#eeb3d5cde000a23cfeeefe0354b6193440dc7d87" - integrity sha512-l9XxNcA4HX98rwCC2/KoiWcmEiRfZe4G+mYwDbCFT87JIMj6GBhLDkAzr/W8KAaA2IDr8Vc6J8fZPgVulxxfMA== - dependencies: - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@cspotcode/source-map-support@^0.8.0": - version "0.8.1" - resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" - integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== - dependencies: - "@jridgewell/trace-mapping" "0.3.9" - -"@defillama/sdk@^5.0.10": - version "5.0.73" - resolved "https://registry.yarnpkg.com/@defillama/sdk/-/sdk-5.0.73.tgz#8011be5938f02c87806c21764c90dd142187bf34" - integrity sha512-uLZeOFNWPKVyZAMtO7dXSJreHKWqETHpbPMZzpNR47icGl4nS2o/SX8xW82BmdLU7cp25EG9sN/sKkht/KnWvA== - dependencies: - "@aws-sdk/client-s3" "^3.400.0" - "@elastic/elasticsearch" "^8.13.1" - "@supercharge/promise-pool" "^2.1.0" - axios "^1.6.5" - ethers "^6.0.0" - p-limit "^3.0.0" - tron-format-address "^0.1.11" - -"@elastic/elasticsearch@^8.13.1": - version "8.14.0" - resolved "https://registry.yarnpkg.com/@elastic/elasticsearch/-/elasticsearch-8.14.0.tgz#93b1f2a7cb6cc5cd1ceebf5060576bc690432e0a" - integrity sha512-MGrgCI4y+Ozssf5Q2IkVJlqt5bUMnKIICG2qxeOfrJNrVugMCBCAQypyesmSSocAtNm8IX3LxfJ3jQlFHmKe2w== - dependencies: - "@elastic/transport" "^8.6.0" - tslib "^2.4.0" - -"@elastic/transport@^8.6.0": - version "8.7.0" - resolved "https://registry.yarnpkg.com/@elastic/transport/-/transport-8.7.0.tgz#006987fc5583f61c266e0b1003371e82efc7a6b5" - integrity sha512-IqXT7a8DZPJtqP2qmX1I2QKmxYyN27kvSW4g6pInESE1SuGwZDp2FxHJ6W2kwmYOJwQdAt+2aWwzXO5jHo9l4A== - dependencies: - "@opentelemetry/api" "1.x" - debug "^4.3.4" - hpagent "^1.0.0" - ms "^2.1.3" - secure-json-parse "^2.4.0" - tslib "^2.4.0" - undici "^6.12.0" - -"@graphql-typed-document-node/core@^3.1.1": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@graphql-typed-document-node/core/-/core-3.2.0.tgz#5f3d96ec6b2354ad6d8a28bf216a1d97b5426861" - integrity sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ== - -"@isaacs/cliui@^8.0.2": - version "8.0.2" - resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" - integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== - dependencies: - string-width "^5.1.2" - string-width-cjs "npm:string-width@^4.2.0" - strip-ansi "^7.0.1" - strip-ansi-cjs "npm:strip-ansi@^6.0.1" - wrap-ansi "^8.1.0" - wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" - -"@jridgewell/resolve-uri@^3.0.3": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" - integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== - -"@jridgewell/sourcemap-codec@^1.4.10": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" - integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== - -"@jridgewell/trace-mapping@0.3.9": - version "0.3.9" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" - integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== - dependencies: - "@jridgewell/resolve-uri" "^3.0.3" - "@jridgewell/sourcemap-codec" "^1.4.10" - -"@noble/curves@1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.2.0.tgz#92d7e12e4e49b23105a2555c6984d41733d65c35" - integrity sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw== - dependencies: - "@noble/hashes" "1.3.2" - -"@noble/hashes@1.3.2": - version "1.3.2" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.2.tgz#6f26dbc8fbc7205873ce3cee2f690eba0d421b39" - integrity sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ== - -"@opentelemetry/api@1.x": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/api/-/api-1.9.0.tgz#d03eba68273dc0f7509e2a3d5cba21eae10379fe" - integrity sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg== - -"@pkgjs/parseargs@^0.11.0": - version "0.11.0" - resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" - integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== - -"@smithy/abort-controller@^3.1.1": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-3.1.1.tgz#291210611ff6afecfc198d0ca72d5771d8461d16" - integrity sha512-MBJBiidoe+0cTFhyxT8g+9g7CeVccLM0IOKKUMCNQ1CNMJ/eIfoo0RTfVrXOONEI1UCN1W+zkiHSbzUNE9dZtQ== - dependencies: - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@smithy/chunked-blob-reader-native@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-3.0.0.tgz#f1104b30030f76f9aadcbd3cdca4377bd1ba2695" - integrity sha512-VDkpCYW+peSuM4zJip5WDfqvg2Mo/e8yxOv3VF1m11y7B8KKMKVFtmZWDe36Fvk8rGuWrPZHHXZ7rR7uM5yWyg== - dependencies: - "@smithy/util-base64" "^3.0.0" - tslib "^2.6.2" - -"@smithy/chunked-blob-reader@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/chunked-blob-reader/-/chunked-blob-reader-3.0.0.tgz#e5d3b04e9b273ba8b7ede47461e2aa96c8aa49e0" - integrity sha512-sbnURCwjF0gSToGlsBiAmd1lRCmSn72nu9axfJu5lIx6RUEgHu6GwTMbqCdhQSi0Pumcm5vFxsi9XWXb2mTaoA== - dependencies: - tslib "^2.6.2" - -"@smithy/config-resolver@^3.0.4", "@smithy/config-resolver@^3.0.5": - version "3.0.5" - resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-3.0.5.tgz#727978bba7ace754c741c259486a19d3083431fd" - integrity sha512-SkW5LxfkSI1bUC74OtfBbdz+grQXYiPYolyu8VfpLIjEoN/sHVBlLeGXMQ1vX4ejkgfv6sxVbQJ32yF2cl1veA== - dependencies: - "@smithy/node-config-provider" "^3.1.4" - "@smithy/types" "^3.3.0" - "@smithy/util-config-provider" "^3.0.0" - "@smithy/util-middleware" "^3.0.3" - tslib "^2.6.2" - -"@smithy/core@^2.2.4": - version "2.2.6" - resolved "https://registry.yarnpkg.com/@smithy/core/-/core-2.2.6.tgz#05e3482079fff7522077e0f3ce2ee6cc507f461c" - integrity sha512-tBbVIv/ui7/lLTKayYJJvi8JLVL2SwOQTbNFEOrvzSE3ktByvsa1erwBOnAMo8N5Vu30g7lN4lLStrU75oDGuw== - dependencies: - "@smithy/middleware-endpoint" "^3.0.5" - "@smithy/middleware-retry" "^3.0.9" - "@smithy/middleware-serde" "^3.0.3" - "@smithy/protocol-http" "^4.0.3" - "@smithy/smithy-client" "^3.1.7" - "@smithy/types" "^3.3.0" - "@smithy/util-middleware" "^3.0.3" - tslib "^2.6.2" - -"@smithy/credential-provider-imds@^3.1.3", "@smithy/credential-provider-imds@^3.1.4": - version "3.1.4" - resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-3.1.4.tgz#797116f68cc3ffa658469558cc014f25d9febe09" - integrity sha512-NKyH01m97Xa5xf3pB2QOF3lnuE8RIK0hTVNU5zvZAwZU8uspYO4DHQVlK+Y5gwSrujTfHvbfd1D9UFJAc0iYKQ== - dependencies: - "@smithy/node-config-provider" "^3.1.4" - "@smithy/property-provider" "^3.1.3" - "@smithy/types" "^3.3.0" - "@smithy/url-parser" "^3.0.3" - tslib "^2.6.2" - -"@smithy/eventstream-codec@^3.1.2": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-3.1.2.tgz#4a1c72b34400631b829241151984a1ad8c4f963c" - integrity sha512-0mBcu49JWt4MXhrhRAlxASNy0IjDRFU+aWNDRal9OtUJvJNiwDuyKMUONSOjLjSCeGwZaE0wOErdqULer8r7yw== - dependencies: - "@aws-crypto/crc32" "5.2.0" - "@smithy/types" "^3.3.0" - "@smithy/util-hex-encoding" "^3.0.0" - tslib "^2.6.2" - -"@smithy/eventstream-serde-browser@^3.0.4": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-3.0.4.tgz#98d6e7ae60d297e37ee7775af2a7a8bbe574579d" - integrity sha512-Eo4anLZX6ltGJTZ5yJMc80gZPYYwBn44g0h7oFq6et+TYr5dUsTpIcDbz2evsOKIZhZ7zBoFWHtBXQ4QQeb5xA== - dependencies: - "@smithy/eventstream-serde-universal" "^3.0.4" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@smithy/eventstream-serde-config-resolver@^3.0.3": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.0.3.tgz#f852e096d0ad112363b4685e1d441088d1fce67a" - integrity sha512-NVTYjOuYpGfrN/VbRQgn31x73KDLfCXCsFdad8DiIc3IcdxL+dYA9zEQPyOP7Fy2QL8CPy2WE4WCUD+ZsLNfaQ== - dependencies: - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@smithy/eventstream-serde-node@^3.0.4": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-node/-/eventstream-serde-node-3.0.4.tgz#6301752ca51b3ebabcd2dec112f1dacd990de4c1" - integrity sha512-mjlG0OzGAYuUpdUpflfb9zyLrBGgmQmrobNT8b42ZTsGv/J03+t24uhhtVEKG/b2jFtPIHF74Bq+VUtbzEKOKg== - dependencies: - "@smithy/eventstream-serde-universal" "^3.0.4" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@smithy/eventstream-serde-universal@^3.0.4": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-3.0.4.tgz#6754de5b94bdc286d8ef1d6bcf22d80f6ab68f30" - integrity sha512-Od9dv8zh3PgOD7Vj4T3HSuox16n0VG8jJIM2gvKASL6aCtcS8CfHZDWe1Ik3ZXW6xBouU+45Q5wgoliWDZiJ0A== - dependencies: - "@smithy/eventstream-codec" "^3.1.2" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@smithy/fetch-http-handler@^3.2.0", "@smithy/fetch-http-handler@^3.2.1": - version "3.2.1" - resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.1.tgz#04ba6804cdf2b1cb783229eede6b9cd8653c5543" - integrity sha512-0w0bgUvZmfa0vHN8a+moByhCJT07WN6AHKEhFSOLsDpnszm+5dLVv5utGaqbhOrZ/aF5x3xuPMs/oMCd+4O5xg== - dependencies: - "@smithy/protocol-http" "^4.0.3" - "@smithy/querystring-builder" "^3.0.3" - "@smithy/types" "^3.3.0" - "@smithy/util-base64" "^3.0.0" - tslib "^2.6.2" - -"@smithy/hash-blob-browser@^3.1.2": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@smithy/hash-blob-browser/-/hash-blob-browser-3.1.2.tgz#90281c1f183d93686fb4f26107f1819644d68829" - integrity sha512-hAbfqN2UbISltakCC2TP0kx4LqXBttEv2MqSPE98gVuDFMf05lU+TpC41QtqGP3Ff5A3GwZMPfKnEy0VmEUpmg== - dependencies: - "@smithy/chunked-blob-reader" "^3.0.0" - "@smithy/chunked-blob-reader-native" "^3.0.0" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@smithy/hash-node@^3.0.3": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-3.0.3.tgz#82c5cb7b0f1a29ee7319081853d2d158c07dff24" - integrity sha512-2ctBXpPMG+B3BtWSGNnKELJ7SH9e4TNefJS0cd2eSkOOROeBnnVBnAy9LtJ8tY4vUEoe55N4CNPxzbWvR39iBw== - dependencies: - "@smithy/types" "^3.3.0" - "@smithy/util-buffer-from" "^3.0.0" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@smithy/hash-stream-node@^3.1.2": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@smithy/hash-stream-node/-/hash-stream-node-3.1.2.tgz#89f0290ae44b113863878e75b10c484ff48af71c" - integrity sha512-PBgDMeEdDzi6JxKwbfBtwQG9eT9cVwsf0dZzLXoJF4sHKHs5HEo/3lJWpn6jibfJwT34I1EBXpBnZE8AxAft6g== - dependencies: - "@smithy/types" "^3.3.0" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@smithy/invalid-dependency@^3.0.3": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-3.0.3.tgz#8d9fd70e3a94b565a4eba4ffbdc95238e1930528" - integrity sha512-ID1eL/zpDULmHJbflb864k72/SNOZCADRc9i7Exq3RUNJw6raWUSlFEQ+3PX3EYs++bTxZB2dE9mEHTQLv61tw== - dependencies: - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@smithy/is-array-buffer@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz#f84f0d9f9a36601a9ca9381688bd1b726fd39111" - integrity sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA== - dependencies: - tslib "^2.6.2" - -"@smithy/is-array-buffer@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz#9a95c2d46b8768946a9eec7f935feaddcffa5e7a" - integrity sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ== - dependencies: - tslib "^2.6.2" - -"@smithy/md5-js@^3.0.3": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@smithy/md5-js/-/md5-js-3.0.3.tgz#55ee40aa24075b096c39f7910590c18ff7660c98" - integrity sha512-O/SAkGVwpWmelpj/8yDtsaVe6sINHLB1q8YE/+ZQbDxIw3SRLbTZuRaI10K12sVoENdnHqzPp5i3/H+BcZ3m3Q== - dependencies: - "@smithy/types" "^3.3.0" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@smithy/middleware-content-length@^3.0.3": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-3.0.3.tgz#426a7f907cc3c0a5d81deb84e16d38303e5a9ad8" - integrity sha512-Dbz2bzexReYIQDWMr+gZhpwBetNXzbhnEMhYKA6urqmojO14CsXjnsoPYO8UL/xxcawn8ZsuVU61ElkLSltIUQ== - dependencies: - "@smithy/protocol-http" "^4.0.3" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@smithy/middleware-endpoint@^3.0.4", "@smithy/middleware-endpoint@^3.0.5": - version "3.0.5" - resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-3.0.5.tgz#76e8a559e891282d3ede9ab8e228e66cbee89b21" - integrity sha512-V4acqqrh5tDxUEGVTOgf2lYMZqPQsoGntCrjrJZEeBzEzDry2d2vcI1QCXhGltXPPY+BMc6eksZMguA9fIY8vA== - dependencies: - "@smithy/middleware-serde" "^3.0.3" - "@smithy/node-config-provider" "^3.1.4" - "@smithy/shared-ini-file-loader" "^3.1.4" - "@smithy/types" "^3.3.0" - "@smithy/url-parser" "^3.0.3" - "@smithy/util-middleware" "^3.0.3" - tslib "^2.6.2" - -"@smithy/middleware-retry@^3.0.7", "@smithy/middleware-retry@^3.0.9": - version "3.0.9" - resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-3.0.9.tgz#3d5c33b49ad372bf02c8525931febc5cc246815c" - integrity sha512-Mrv9omExU1gA7Y0VEJG2LieGfPYtwwcEiOnVGZ54a37NEMr66TJ0glFslOJFuKWG6izg5DpKIUmDV9rRxjm47Q== - dependencies: - "@smithy/node-config-provider" "^3.1.4" - "@smithy/protocol-http" "^4.0.3" - "@smithy/service-error-classification" "^3.0.3" - "@smithy/smithy-client" "^3.1.7" - "@smithy/types" "^3.3.0" - "@smithy/util-middleware" "^3.0.3" - "@smithy/util-retry" "^3.0.3" - tslib "^2.6.2" - uuid "^9.0.1" - -"@smithy/middleware-serde@^3.0.3": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-3.0.3.tgz#74d974460f74d99f38c861e6862984543a880a66" - integrity sha512-puUbyJQBcg9eSErFXjKNiGILJGtiqmuuNKEYNYfUD57fUl4i9+mfmThtQhvFXU0hCVG0iEJhvQUipUf+/SsFdA== - dependencies: - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@smithy/middleware-stack@^3.0.3": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-3.0.3.tgz#91845c7e61e6f137fa912b623b6def719a4f6ce7" - integrity sha512-r4klY9nFudB0r9UdSMaGSyjyQK5adUyPnQN/ZM6M75phTxOdnc/AhpvGD1fQUvgmqjQEBGCwpnPbDm8pH5PapA== - dependencies: - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@smithy/node-config-provider@^3.1.3", "@smithy/node-config-provider@^3.1.4": - version "3.1.4" - resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-3.1.4.tgz#05647bed666aa8036a1ad72323c1942e5d421be1" - integrity sha512-YvnElQy8HR4vDcAjoy7Xkx9YT8xZP4cBXcbJSgm/kxmiQu08DwUwj8rkGnyoJTpfl/3xYHH+d8zE+eHqoDCSdQ== - dependencies: - "@smithy/property-provider" "^3.1.3" - "@smithy/shared-ini-file-loader" "^3.1.4" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@smithy/node-http-handler@^3.1.1", "@smithy/node-http-handler@^3.1.2": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-3.1.2.tgz#2d753c07f11e7a3da3534b156320d1e0e9401617" - integrity sha512-Td3rUNI7qqtoSLTsJBtsyfoG4cF/XMFmJr6Z2dX8QNzIi6tIW6YmuyFml8mJ2cNpyWNqITKbROMOFrvQjmsOvw== - dependencies: - "@smithy/abort-controller" "^3.1.1" - "@smithy/protocol-http" "^4.0.3" - "@smithy/querystring-builder" "^3.0.3" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@smithy/property-provider@^3.1.3": - version "3.1.3" - resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-3.1.3.tgz#afd57ea82a3f6c79fbda95e3cb85c0ee0a79f39a" - integrity sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g== - dependencies: - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@smithy/protocol-http@^4.0.3": - version "4.0.3" - resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-4.0.3.tgz#acf16058504e3cce2dbe8abf94f7b544cd09d3f4" - integrity sha512-x5jmrCWwQlx+Zv4jAtc33ijJ+vqqYN+c/ZkrnpvEe/uDas7AT7A/4Rc2CdfxgWv4WFGmEqODIrrUToPN6DDkGw== - dependencies: - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@smithy/querystring-builder@^3.0.3": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-3.0.3.tgz#6b0e566f885bb84938d077c69e8f8555f686af13" - integrity sha512-vyWckeUeesFKzCDaRwWLUA1Xym9McaA6XpFfAK5qI9DKJ4M33ooQGqvM4J+LalH4u/Dq9nFiC8U6Qn1qi0+9zw== - dependencies: - "@smithy/types" "^3.3.0" - "@smithy/util-uri-escape" "^3.0.0" - tslib "^2.6.2" - -"@smithy/querystring-parser@^3.0.3": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-3.0.3.tgz#272a6b83f88dfcbbec8283d72a6bde850cc00091" - integrity sha512-zahM1lQv2YjmznnfQsWbYojFe55l0SLG/988brlLv1i8z3dubloLF+75ATRsqPBboUXsW6I9CPGE5rQgLfY0vQ== - dependencies: - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@smithy/service-error-classification@^3.0.3": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-3.0.3.tgz#73484255060a094aa9372f6cd972dcaf97e3ce80" - integrity sha512-Jn39sSl8cim/VlkLsUhRFq/dKDnRUFlfRkvhOJaUbLBXUsLRLNf9WaxDv/z9BjuQ3A6k/qE8af1lsqcwm7+DaQ== - dependencies: - "@smithy/types" "^3.3.0" - -"@smithy/shared-ini-file-loader@^3.1.3", "@smithy/shared-ini-file-loader@^3.1.4": - version "3.1.4" - resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.4.tgz#7dceaf5a5307a2ee347ace8aba17312a1a3ede15" - integrity sha512-qMxS4hBGB8FY2GQqshcRUy1K6k8aBWP5vwm8qKkCT3A9K2dawUwOIJfqh9Yste/Bl0J2lzosVyrXDj68kLcHXQ== - dependencies: - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@smithy/signature-v4@^3.1.2": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-3.1.2.tgz#63fc0d4f9a955e902138fb0a57fafc96b9d4e8bb" - integrity sha512-3BcPylEsYtD0esM4Hoyml/+s7WP2LFhcM3J2AGdcL2vx9O60TtfpDOL72gjb4lU8NeRPeKAwR77YNyyGvMbuEA== - dependencies: - "@smithy/is-array-buffer" "^3.0.0" - "@smithy/types" "^3.3.0" - "@smithy/util-hex-encoding" "^3.0.0" - "@smithy/util-middleware" "^3.0.3" - "@smithy/util-uri-escape" "^3.0.0" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@smithy/smithy-client@^3.1.5", "@smithy/smithy-client@^3.1.7": - version "3.1.7" - resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-3.1.7.tgz#56c1eee68b903053e246fb141253a567cc4d9930" - integrity sha512-nZbJZB0XI3YnaFBWGDBr7kjaew6O0oNYNmopyIz6gKZEbxzrtH7rwvU1GcVxcSFoOwWecLJEe79fxEMljHopFQ== - dependencies: - "@smithy/middleware-endpoint" "^3.0.5" - "@smithy/middleware-stack" "^3.0.3" - "@smithy/protocol-http" "^4.0.3" - "@smithy/types" "^3.3.0" - "@smithy/util-stream" "^3.0.6" - tslib "^2.6.2" - -"@smithy/types@^3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@smithy/types/-/types-3.3.0.tgz#fae037c733d09bc758946a01a3de0ef6e210b16b" - integrity sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA== - dependencies: - tslib "^2.6.2" - -"@smithy/url-parser@^3.0.3": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-3.0.3.tgz#e8a060d9810b24b1870385fc2b02485b8a6c5955" - integrity sha512-pw3VtZtX2rg+s6HMs6/+u9+hu6oY6U7IohGhVNnjbgKy86wcIsSZwgHrFR+t67Uyxvp4Xz3p3kGXXIpTNisq8A== - dependencies: - "@smithy/querystring-parser" "^3.0.3" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@smithy/util-base64@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/util-base64/-/util-base64-3.0.0.tgz#f7a9a82adf34e27a72d0719395713edf0e493017" - integrity sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ== - dependencies: - "@smithy/util-buffer-from" "^3.0.0" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@smithy/util-body-length-browser@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/util-body-length-browser/-/util-body-length-browser-3.0.0.tgz#86ec2f6256310b4845a2f064e2f571c1ca164ded" - integrity sha512-cbjJs2A1mLYmqmyVl80uoLTJhAcfzMOyPgjwAYusWKMdLeNtzmMz9YxNl3/jRLoxSS3wkqkf0jwNdtXWtyEBaQ== - dependencies: - tslib "^2.6.2" - -"@smithy/util-body-length-node@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/util-body-length-node/-/util-body-length-node-3.0.0.tgz#99a291bae40d8932166907fe981d6a1f54298a6d" - integrity sha512-Tj7pZ4bUloNUP6PzwhN7K386tmSmEET9QtQg0TgdNOnxhZvCssHji+oZTUIuzxECRfG8rdm2PMw2WCFs6eIYkA== - dependencies: - tslib "^2.6.2" - -"@smithy/util-buffer-from@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz#6fc88585165ec73f8681d426d96de5d402021e4b" - integrity sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA== - dependencies: - "@smithy/is-array-buffer" "^2.2.0" - tslib "^2.6.2" - -"@smithy/util-buffer-from@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz#559fc1c86138a89b2edaefc1e6677780c24594e3" - integrity sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA== - dependencies: - "@smithy/is-array-buffer" "^3.0.0" - tslib "^2.6.2" - -"@smithy/util-config-provider@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/util-config-provider/-/util-config-provider-3.0.0.tgz#62c6b73b22a430e84888a8f8da4b6029dd5b8efe" - integrity sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ== - dependencies: - tslib "^2.6.2" - -"@smithy/util-defaults-mode-browser@^3.0.7": - version "3.0.9" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.9.tgz#a7035ca57f359810f52d828c68ad8746b0120113" - integrity sha512-WKPcElz92MAQG09miBdb0GxEH/MwD5GfE8g07WokITq5g6J1ROQfYCKC1wNnkqAGfrSywT7L0rdvvqlBplqiyA== - dependencies: - "@smithy/property-provider" "^3.1.3" - "@smithy/smithy-client" "^3.1.7" - "@smithy/types" "^3.3.0" - bowser "^2.11.0" - tslib "^2.6.2" - -"@smithy/util-defaults-mode-node@^3.0.7": - version "3.0.9" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.9.tgz#d31cd62e9bcc005f92923fc7b6bc0366c3b0478a" - integrity sha512-dQLrUqFxqpf0GvEKEuFdgXcdZwz6oFm752h4d6C7lQz+RLddf761L2r7dSwGWzESMMB3wKj0jL+skRhEGlecjw== - dependencies: - "@smithy/config-resolver" "^3.0.5" - "@smithy/credential-provider-imds" "^3.1.4" - "@smithy/node-config-provider" "^3.1.4" - "@smithy/property-provider" "^3.1.3" - "@smithy/smithy-client" "^3.1.7" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@smithy/util-endpoints@^2.0.4": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-2.0.5.tgz#e3a7a4d1c41250bfd2b2d890d591273a7d8934be" - integrity sha512-ReQP0BWihIE68OAblC/WQmDD40Gx+QY1Ez8mTdFMXpmjfxSyz2fVQu3A4zXRfQU9sZXtewk3GmhfOHswvX+eNg== - dependencies: - "@smithy/node-config-provider" "^3.1.4" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@smithy/util-hex-encoding@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz#32938b33d5bf2a15796cd3f178a55b4155c535e6" - integrity sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ== - dependencies: - tslib "^2.6.2" - -"@smithy/util-middleware@^3.0.3": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-3.0.3.tgz#07bf9602682f5a6c55bc2f0384303f85fc68c87e" - integrity sha512-l+StyYYK/eO3DlVPbU+4Bi06Jjal+PFLSMmlWM1BEwyLxZ3aKkf1ROnoIakfaA7mC6uw3ny7JBkau4Yc+5zfWw== - dependencies: - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@smithy/util-retry@^3.0.3": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-3.0.3.tgz#9b2ac0dbb1c81f69812a8affa4d772bebfc0e049" - integrity sha512-AFw+hjpbtVApzpNDhbjNG5NA3kyoMs7vx0gsgmlJF4s+yz1Zlepde7J58zpIRIsdjc+emhpAITxA88qLkPF26w== - dependencies: - "@smithy/service-error-classification" "^3.0.3" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@smithy/util-stream@^3.0.5", "@smithy/util-stream@^3.0.6": - version "3.0.6" - resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-3.0.6.tgz#233624e0e024f5846cf1fdbfb2a2ab5352d724ee" - integrity sha512-w9i//7egejAIvplX821rPWWgaiY1dxsQUw0hXX7qwa/uZ9U3zplqTQ871jWadkcVB9gFDhkPWYVZf4yfFbZ0xA== - dependencies: - "@smithy/fetch-http-handler" "^3.2.1" - "@smithy/node-http-handler" "^3.1.2" - "@smithy/types" "^3.3.0" - "@smithy/util-base64" "^3.0.0" - "@smithy/util-buffer-from" "^3.0.0" - "@smithy/util-hex-encoding" "^3.0.0" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@smithy/util-uri-escape@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz#e43358a78bf45d50bb736770077f0f09195b6f54" - integrity sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg== - dependencies: - tslib "^2.6.2" - -"@smithy/util-utf8@^2.0.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@smithy/util-utf8/-/util-utf8-2.3.0.tgz#dd96d7640363259924a214313c3cf16e7dd329c5" - integrity sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A== - dependencies: - "@smithy/util-buffer-from" "^2.2.0" - tslib "^2.6.2" - -"@smithy/util-utf8@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/util-utf8/-/util-utf8-3.0.0.tgz#1a6a823d47cbec1fd6933e5fc87df975286d9d6a" - integrity sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA== - dependencies: - "@smithy/util-buffer-from" "^3.0.0" - tslib "^2.6.2" - -"@smithy/util-waiter@^3.1.2": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@smithy/util-waiter/-/util-waiter-3.1.2.tgz#2d40c3312f3537feee763459a19acafab4c75cf3" - integrity sha512-4pP0EV3iTsexDx+8PPGAKCQpd/6hsQBaQhqWzU4hqKPHN5epPsxKbvUTIiYIHTxaKt6/kEaqPBpu/ufvfbrRzw== - dependencies: - "@smithy/abort-controller" "^3.1.1" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@supercharge/promise-pool@^2.1.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@supercharge/promise-pool/-/promise-pool-2.4.0.tgz#6050eea8c2d7f92ddd4ddc582ee328b15c034ad3" - integrity sha512-O9CMipBlq5OObdt1uKJGIzm9cdjpPWfj+a+Zw9EgWKxaMNHKC7EU7X9taj3H0EGQNLOSq2jAcOa3EzxlfHsD6w== - -"@supercharge/promise-pool@^3.1.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@supercharge/promise-pool/-/promise-pool-3.2.0.tgz#a6ab4afdf798e453a6bb51c4ae340852e1266af8" - integrity sha512-pj0cAALblTZBPtMltWOlZTQSLT07jIaFNeM8TWoJD1cQMgDB9mcMlVMoetiB35OzNJpqQ2b+QEtwiR9f20mADg== - -"@tsconfig/node10@^1.0.7": - version "1.0.11" - resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.11.tgz#6ee46400685f130e278128c7b38b7e031ff5b2f2" - integrity sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw== - -"@tsconfig/node12@^1.0.7": - version "1.0.11" - resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" - integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== - -"@tsconfig/node14@^1.0.0": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" - integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== - -"@tsconfig/node16@^1.0.2": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" - integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== - -"@types/async-retry@^1.4.8": - version "1.4.8" - resolved "https://registry.yarnpkg.com/@types/async-retry/-/async-retry-1.4.8.tgz#eb32df13aceb9ba1a8a80e7fe518ff4e3fe46bb3" - integrity sha512-Qup/B5PWLe86yI5I3av6ePGaeQrIHNKCwbsQotD6aHQ6YkHsMUxVZkZsmx/Ry3VZQ6uysHwTjQ7666+k6UjVJA== - dependencies: - "@types/retry" "*" - -"@types/debug@^4.1.8": - version "4.1.12" - resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.12.tgz#a155f21690871953410df4b6b6f53187f0500917" - integrity sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ== - dependencies: - "@types/ms" "*" - -"@types/ms@*": - version "0.7.34" - resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.34.tgz#10964ba0dee6ac4cd462e2795b6bebd407303433" - integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== - -"@types/node@*": - version "20.14.10" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.14.10.tgz#a1a218290f1b6428682e3af044785e5874db469a" - integrity sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ== - dependencies: - undici-types "~5.26.4" - -"@types/node@18.15.13": - version "18.15.13" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.15.13.tgz#f64277c341150c979e42b00e4ac289290c9df469" - integrity sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q== - -"@types/node@^18.7.23": - version "18.19.39" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.39.tgz#c316340a5b4adca3aee9dcbf05de385978590593" - integrity sha512-nPwTRDKUctxw3di5b4TfT3I0sWDiWoPQCZjXhvdkINntwr8lcoVCKsTgnXeRubKIlfnV+eN/HYk6Jb40tbcEAQ== - dependencies: - undici-types "~5.26.4" - -"@types/retry@*": - version "0.12.5" - resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.5.tgz#f090ff4bd8d2e5b940ff270ab39fd5ca1834a07e" - integrity sha512-3xSjTp3v03X/lSQLkczaN9UIEwJMoMCA1+Nb5HfbJEQWogdeQIyVtTvxPXDQjZ5zws8rFQfVfRdz03ARihPJgw== - -"@types/validator@^13.7.17": - version "13.12.0" - resolved "https://registry.yarnpkg.com/@types/validator/-/validator-13.12.0.tgz#1fe4c3ae9de5cf5193ce64717c99ef2fa7d8756f" - integrity sha512-nH45Lk7oPIJ1RVOF6JgFI6Dy0QpHEzq4QecZhvguxYPDwT8c93prCMqAtiIttm39voZ+DDR+qkNnMpJmMBRqag== - -acorn-walk@^8.1.1: - version "8.3.3" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.3.tgz#9caeac29eefaa0c41e3d4c65137de4d6f34df43e" - integrity sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw== - dependencies: - acorn "^8.11.0" - -acorn@^8.11.0, acorn@^8.4.1: - version "8.12.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.12.1.tgz#71616bdccbe25e27a54439e0046e89ca76df2248" - integrity sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg== - -aes-js@4.0.0-beta.5: - version "4.0.0-beta.5" - resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-4.0.0-beta.5.tgz#8d2452c52adedebc3a3e28465d858c11ca315873" - integrity sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q== - -ansi-escapes@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" - integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== - -ansi-escapes@^4.2.1, ansi-escapes@^4.3.1: - 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@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.1.tgz#123d6479e92ad45ad897d4054e3c7ca7db4944e1" - integrity sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw== - -ansi-regex@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed" - integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g== - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-regex@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" - integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== - -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -ansi-styles@^6.1.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" - integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== - -arg@^4.1.0: - version "4.1.3" - resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" - integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== - -async-retry@^1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/async-retry/-/async-retry-1.3.3.tgz#0e7f36c04d8478e7a58bdbed80cedf977785f280" - integrity sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw== - dependencies: - retry "0.13.1" - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== - -axios@^1.6.5: - version "1.7.2" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.2.tgz#b625db8a7051fbea61c35a3cbb3a1daa7b9c7621" - integrity sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw== - dependencies: - follow-redirects "^1.15.6" - form-data "^4.0.0" - proxy-from-env "^1.1.0" - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -bignumber.js@^9.1.0: - version "9.1.2" - resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.2.tgz#b7c4242259c008903b13707983b5f4bbd31eda0c" - integrity sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug== - -bl@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" - integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== - dependencies: - buffer "^5.5.0" - inherits "^2.0.4" - readable-stream "^3.4.0" - -bowser@^2.11.0: - version "2.11.0" - resolved "https://registry.yarnpkg.com/bowser/-/bowser-2.11.0.tgz#5ca3c35757a7aa5771500c70a73a9f91ef420a8f" - integrity sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA== - -brace-expansion@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" - integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== - dependencies: - balanced-match "^1.0.0" - -buffer@^5.5.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" - integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.1.13" - -chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - 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== - -cli-cursor@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" - integrity sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw== - dependencies: - restore-cursor "^2.0.0" - -cli-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" - integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== - dependencies: - restore-cursor "^3.1.0" - -cli-spinners@^2.5.0: - version "2.9.2" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.2.tgz#1773a8f4b9c4d6ac31563df53b3fc1d79462fe41" - integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== - -cli-width@^2.0.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" - integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw== - -cli-width@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" - integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== - -clone@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" - integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== - -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== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -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" - -create-require@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" - integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== - -cross-fetch@^3.1.5: - version "3.1.8" - resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.8.tgz#0327eba65fd68a7d119f8fb2bf9334a1a7956f82" - integrity sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg== - dependencies: - node-fetch "^2.6.12" - -cross-spawn@^7.0.0: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -debug@^4.3.4: - version "4.3.5" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.5.tgz#e83444eceb9fedd4a1da56d671ae2446a01a6e1e" - integrity sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg== - dependencies: - ms "2.1.2" - -defaults@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a" - integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== - dependencies: - clone "^1.0.2" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== - -diff@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" - integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== - -dotenv@^16.0.3: - version "16.4.5" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.5.tgz#cdd3b3b604cb327e286b4762e13502f717cb099f" - integrity sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg== - -dottie@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/dottie/-/dottie-2.0.6.tgz#34564ebfc6ec5e5772272d466424ad5b696484d4" - integrity sha512-iGCHkfUc5kFekGiqhe8B/mdaurD+lakO9txNnTvKtA6PISrw86LgqHvRzWYPyoE2Ph5aMIrCw9/uko6XHTKCwA== - -eastasianwidth@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" - integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -emoji-regex@^9.2.2: - version "9.2.2" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" - integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - -ethers@^6.0.0, ethers@^6.9.2: - version "6.13.1" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.13.1.tgz#2b9f9c7455cde9d38b30fe6589972eb083652961" - integrity sha512-hdJ2HOxg/xx97Lm9HdCWk949BfYqYWpyw4//78SiwOLgASyfrNszfMUNB2joKjvGUdwhHfaiMMFFwacVVoLR9A== - dependencies: - "@adraffy/ens-normalize" "1.10.1" - "@noble/curves" "1.2.0" - "@noble/hashes" "1.3.2" - "@types/node" "18.15.13" - aes-js "4.0.0-beta.5" - tslib "2.4.0" - ws "8.17.1" - -external-editor@^3.0.3: - 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-files@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/extract-files/-/extract-files-9.0.0.tgz#8a7744f2437f81f5ed3250ed9f1550de902fe54a" - integrity sha512-CvdFfHkC95B4bBBk36hcEmvdR2awOdhhVUYH6S/zrVj3477zven/fJMYg7121h4T1xHZC+tetUpubpAhxwI7hQ== - -fast-xml-parser@4.2.5: - version "4.2.5" - resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz#a6747a09296a6cb34f2ae634019bf1738f3b421f" - integrity sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g== - dependencies: - strnum "^1.0.5" - -figures@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" - integrity sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA== - dependencies: - escape-string-regexp "^1.0.5" - -figures@^3.0.0, figures@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" - integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== - dependencies: - escape-string-regexp "^1.0.5" - -follow-redirects@^1.15.6: - version "1.15.6" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b" - integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== - -foreground-child@^3.1.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.2.1.tgz#767004ccf3a5b30df39bed90718bab43fe0a59f7" - integrity sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA== - dependencies: - cross-spawn "^7.0.0" - signal-exit "^4.0.1" - -form-data@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" - integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - -form-data@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" - integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - -fuzzy@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/fuzzy/-/fuzzy-0.1.3.tgz#4c76ec2ff0ac1a36a9dccf9a00df8623078d4ed8" - integrity sha512-/gZffu4ykarLrCiP3Ygsa86UAo1E5vEVlvTrpkKywXSbP9Xhln3oSp9QSV57gEq3JFFpGJ4GZ+5zdEp3FcUh4w== - -glob@^10.3.10: - version "10.4.5" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.5.tgz#f4d9f0b90ffdbab09c9d77f5f29b4262517b0956" - integrity sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg== - dependencies: - foreground-child "^3.1.0" - jackspeak "^3.1.2" - minimatch "^9.0.4" - minipass "^7.1.2" - package-json-from-dist "^1.0.0" - path-scurry "^1.11.1" - -graphql-request@5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/graphql-request/-/graphql-request-5.1.0.tgz#dbc8feee27d21b993cd5da2d3af67821827b240a" - integrity sha512-0OeRVYigVwIiXhNmqnPDt+JhMzsjinxHE7TVy3Lm6jUzav0guVcL0lfSbi6jVTRAxcbwgyr6yrZioSHxf9gHzw== - dependencies: - "@graphql-typed-document-node/core" "^3.1.1" - cross-fetch "^3.1.5" - extract-files "^9.0.0" - form-data "^3.0.0" - -graphql@^16.6.0: - version "16.9.0" - resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.9.0.tgz#1c310e63f16a49ce1fbb230bd0a000e99f6f115f" - integrity sha512-GGTKBX4SD7Wdb8mqeDLni2oaRGYQWjWHGKPQ24ZMnUtKfcsVoiv4uX8+LJr1K6U5VW2Lu1BwJnj7uiori0YtRw== - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -hpagent@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/hpagent/-/hpagent-1.2.0.tgz#0ae417895430eb3770c03443456b8d90ca464903" - integrity sha512-A91dYTeIB6NoXG+PxTQpCCDDnfHsW9kc06Lvpu1TEe9gnd6ZFeiBoRO9JvzEv6xK7EX97/dUE8g/vBMTqTS3CA== - -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" - -ieee754@^1.1.13: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -inflection@^1.13.4: - version "1.13.4" - resolved "https://registry.yarnpkg.com/inflection/-/inflection-1.13.4.tgz#65aa696c4e2da6225b148d7a154c449366633a32" - integrity sha512-6I/HUDeYFfuNCVS3td055BaXBwKYuzw7K3ExVMStBowKo9oOAMJIXIHvdyR3iboTCp1b+1i5DSkIZTcwIktuDw== - -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-autocomplete-prompt@^1.0.2: - version "1.4.0" - resolved "https://registry.yarnpkg.com/inquirer-autocomplete-prompt/-/inquirer-autocomplete-prompt-1.4.0.tgz#e767592f747e3d5bb6336fe71fb4094352e4c317" - integrity sha512-qHgHyJmbULt4hI+kCmwX92MnSxDs/Yhdt4wPA30qnoa01OF6uTXV8yvH4hKXgdaTNmkZ9D01MHjqKYEuJN+ONw== - dependencies: - ansi-escapes "^4.3.1" - chalk "^4.0.0" - figures "^3.2.0" - run-async "^2.4.0" - rxjs "^6.6.2" - -inquirer-fuzzy-path@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/inquirer-fuzzy-path/-/inquirer-fuzzy-path-2.3.0.tgz#9bc51dc47d7d9c7eb53daac7fd7c9e615eb040c5" - integrity sha512-zfHC/97GSkxKKM7IctZM22x1sVi+FYBh9oaHTmI7Er/GKFpNykUgtviTmqqpiFQs5yJoSowxbT0PHy6N+H+QRg== - dependencies: - ansi-styles "^3.2.1" - fuzzy "^0.1.3" - inquirer "^6.0.0" - inquirer-autocomplete-prompt "^1.0.2" - strip-ansi "^4.0.0" - -inquirer@^6.0.0: - version "6.5.2" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca" - integrity sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ== - dependencies: - ansi-escapes "^3.2.0" - chalk "^2.4.2" - cli-cursor "^2.1.0" - cli-width "^2.0.0" - external-editor "^3.0.3" - figures "^2.0.0" - lodash "^4.17.12" - mute-stream "0.0.7" - run-async "^2.2.0" - rxjs "^6.4.0" - string-width "^2.1.0" - strip-ansi "^5.1.0" - through "^2.3.6" - -inquirer@^8.0.0: - version "8.2.6" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.6.tgz#733b74888195d8d400a67ac332011b5fae5ea562" - integrity sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg== - dependencies: - ansi-escapes "^4.2.1" - chalk "^4.1.1" - cli-cursor "^3.1.0" - cli-width "^3.0.0" - external-editor "^3.0.3" - figures "^3.0.0" - lodash "^4.17.21" - mute-stream "0.0.8" - ora "^5.4.1" - run-async "^2.4.0" - rxjs "^7.5.5" - string-width "^4.1.0" - strip-ansi "^6.0.0" - through "^2.3.6" - wrap-ansi "^6.0.1" - -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w== - -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" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-interactive@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" - integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== - -is-unicode-supported@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" - integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - -jackspeak@^3.1.2: - version "3.4.2" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.2.tgz#c3d1e00071d52dba8b0dac17cd2a12d0187d2989" - integrity sha512-qH3nOSj8q/8+Eg8LUPOq3C+6HWkpUioIjDsq1+D4zY91oZvpPttw8GwtF1nReRYKXl+1AORyFqtm2f5Q1SB6/Q== - dependencies: - "@isaacs/cliui" "^8.0.2" - optionalDependencies: - "@pkgjs/parseargs" "^0.11.0" - -lodash@^4.17.12, lodash@^4.17.21: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -log-symbols@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" - integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== - dependencies: - chalk "^4.1.0" - is-unicode-supported "^0.1.0" - -lru-cache@^10.2.0: - version "10.4.3" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" - integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== - -make-error@^1.1.1: - version "1.3.6" - resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" - integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== - -mime-db@1.52.0: - version "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: - 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" - -mimic-fn@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" - integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== - -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -minimatch@^9.0.4: - version "9.0.5" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" - integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== - dependencies: - brace-expansion "^2.0.1" - -"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.1.2: - version "7.1.2" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" - integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== - -moment-timezone@^0.5.43: - version "0.5.45" - resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.45.tgz#cb685acd56bac10e69d93c536366eb65aa6bcf5c" - integrity sha512-HIWmqA86KcmCAhnMAN0wuDOARV/525R2+lOLotuGFzn4HO+FH+/645z2wx0Dt3iDv6/p61SIvKnDstISainhLQ== - dependencies: - moment "^2.29.4" - -moment@^2.29.4: - version "2.30.1" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.30.1.tgz#f8c91c07b7a786e30c59926df530b4eac96974ae" - integrity sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how== - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@^2.1.3: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -mute-stream@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" - integrity sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ== - -mute-stream@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" - integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== - -node-fetch@^2.6.12: - version "2.7.0" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" - integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== - dependencies: - whatwg-url "^5.0.0" - -onetime@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" - integrity sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ== - dependencies: - mimic-fn "^1.0.0" - -onetime@^5.1.0: - version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - -ora@^5.4.1: - version "5.4.1" - resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" - integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== - dependencies: - bl "^4.1.0" - chalk "^4.1.0" - cli-cursor "^3.1.0" - cli-spinners "^2.5.0" - is-interactive "^1.0.0" - is-unicode-supported "^0.1.0" - log-symbols "^4.1.0" - strip-ansi "^6.0.0" - wcwidth "^1.0.1" - -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== - -p-limit@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - -package-json-from-dist@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz#e501cd3094b278495eb4258d4c9f6d5ac3019f00" - integrity sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw== - -path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-scurry@^1.11.1: - version "1.11.1" - resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2" - integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== - dependencies: - lru-cache "^10.2.0" - minipass "^5.0.0 || ^6.0.2 || ^7.0.0" - -pg-cloudflare@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/pg-cloudflare/-/pg-cloudflare-1.1.1.tgz#e6d5833015b170e23ae819e8c5d7eaedb472ca98" - integrity sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q== - -pg-connection-string@^2.6.1, pg-connection-string@^2.6.4: - version "2.6.4" - resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.6.4.tgz#f543862adfa49fa4e14bc8a8892d2a84d754246d" - integrity sha512-v+Z7W/0EO707aNMaAEfiGnGL9sxxumwLl2fJvCQtMn9Fxsg+lPpPkdcyBSv/KFgpGdYkMfn+EI1Or2EHjpgLCA== - -pg-int8@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/pg-int8/-/pg-int8-1.0.1.tgz#943bd463bf5b71b4170115f80f8efc9a0c0eb78c" - integrity sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw== - -pg-pool@^3.6.2: - version "3.6.2" - resolved "https://registry.yarnpkg.com/pg-pool/-/pg-pool-3.6.2.tgz#3a592370b8ae3f02a7c8130d245bc02fa2c5f3f2" - integrity sha512-Htjbg8BlwXqSBQ9V8Vjtc+vzf/6fVUuak/3/XXKA9oxZprwW3IMDQTGHP+KDmVL7rtd+R1QjbnCFPuTHm3G4hg== - -pg-protocol@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/pg-protocol/-/pg-protocol-1.6.1.tgz#21333e6d83b01faaebfe7a33a7ad6bfd9ed38cb3" - integrity sha512-jPIlvgoD63hrEuihvIg+tJhoGjUsLPn6poJY9N5CnlPd91c2T18T/9zBtLxZSb1EhYxBRoZJtzScCaWlYLtktg== - -pg-types@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/pg-types/-/pg-types-2.2.0.tgz#2d0250d636454f7cfa3b6ae0382fdfa8063254a3" - integrity sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA== - dependencies: - pg-int8 "1.0.1" - postgres-array "~2.0.0" - postgres-bytea "~1.0.0" - postgres-date "~1.0.4" - postgres-interval "^1.1.0" - -pg@^8.11.3: - version "8.12.0" - resolved "https://registry.yarnpkg.com/pg/-/pg-8.12.0.tgz#9341724db571022490b657908f65aee8db91df79" - integrity sha512-A+LHUSnwnxrnL/tZ+OLfqR1SxLN3c/pgDztZ47Rpbsd4jUytsTtwQo/TLPRzPJMp/1pbhYVhH9cuSZLAajNfjQ== - dependencies: - pg-connection-string "^2.6.4" - pg-pool "^3.6.2" - pg-protocol "^1.6.1" - pg-types "^2.1.0" - pgpass "1.x" - optionalDependencies: - pg-cloudflare "^1.1.1" - -pgpass@1.x: - version "1.0.5" - resolved "https://registry.yarnpkg.com/pgpass/-/pgpass-1.0.5.tgz#9b873e4a564bb10fa7a7dbd55312728d422a223d" - integrity sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug== - dependencies: - split2 "^4.1.0" - -postgres-array@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postgres-array/-/postgres-array-2.0.0.tgz#48f8fce054fbc69671999329b8834b772652d82e" - integrity sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA== - -postgres-bytea@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/postgres-bytea/-/postgres-bytea-1.0.0.tgz#027b533c0aa890e26d172d47cf9ccecc521acd35" - integrity sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w== - -postgres-date@~1.0.4: - version "1.0.7" - resolved "https://registry.yarnpkg.com/postgres-date/-/postgres-date-1.0.7.tgz#51bc086006005e5061c591cee727f2531bf641a8" - integrity sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q== - -postgres-interval@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/postgres-interval/-/postgres-interval-1.2.0.tgz#b460c82cb1587507788819a06aa0fffdb3544695" - integrity sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ== - dependencies: - xtend "^4.0.0" - -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== - -readable-stream@^3.4.0: - version "3.6.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" - integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -restore-cursor@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" - integrity sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q== - dependencies: - onetime "^2.0.0" - signal-exit "^3.0.2" - -restore-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" - integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== - dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" - -retry-as-promised@^7.0.4: - version "7.0.4" - resolved "https://registry.yarnpkg.com/retry-as-promised/-/retry-as-promised-7.0.4.tgz#9df73adaeea08cb2948b9d34990549dc13d800a2" - integrity sha512-XgmCoxKWkDofwH8WddD0w85ZfqYz+ZHlr5yo+3YUCfycWawU56T5ckWXsScsj5B8tqUcIG67DxXByo3VUgiAdA== - -retry@0.13.1: - version "0.13.1" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" - integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== - -run-async@^2.2.0, run-async@^2.4.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" - integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== - -rxjs@^6.4.0, rxjs@^6.6.2: - version "6.6.7" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" - integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== - dependencies: - tslib "^1.9.0" - -rxjs@^7.5.5: - version "7.8.1" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" - integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== - dependencies: - tslib "^2.1.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== - -"safer-buffer@>= 2.1.2 < 3": - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -secure-json-parse@^2.4.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/secure-json-parse/-/secure-json-parse-2.7.0.tgz#5a5f9cd6ae47df23dba3151edd06855d47e09862" - integrity sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw== - -semver@^7.5.4: - version "7.6.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.2.tgz#1e3b34759f896e8f14d6134732ce798aeb0c6e13" - integrity sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w== - -sequelize-pool@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/sequelize-pool/-/sequelize-pool-7.1.0.tgz#210b391af4002762f823188fd6ecfc7413020768" - integrity sha512-G9c0qlIWQSK29pR/5U2JF5dDQeqqHRragoyahj/Nx4KOOQ3CPPfzxnfqFPCSB7x5UgjOgnZ61nSxz+fjDpRlJg== - -sequelize@^6.36.0: - version "6.37.3" - resolved "https://registry.yarnpkg.com/sequelize/-/sequelize-6.37.3.tgz#ed6212029a52c59a18638d2a703da84bc2f81311" - integrity sha512-V2FTqYpdZjPy3VQrZvjTPnOoLm0KudCRXfGWp48QwhyPPp2yW8z0p0sCYZd/em847Tl2dVxJJ1DR+hF+O77T7A== - dependencies: - "@types/debug" "^4.1.8" - "@types/validator" "^13.7.17" - debug "^4.3.4" - dottie "^2.0.6" - inflection "^1.13.4" - lodash "^4.17.21" - moment "^2.29.4" - moment-timezone "^0.5.43" - pg-connection-string "^2.6.1" - retry-as-promised "^7.0.4" - semver "^7.5.4" - sequelize-pool "^7.1.0" - toposort-class "^1.0.1" - uuid "^8.3.2" - validator "^13.9.0" - wkx "^0.5.0" - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -signal-exit@^3.0.2: - version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - -signal-exit@^4.0.1: - version "4.1.0" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" - integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== - -split2@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/split2/-/split2-4.2.0.tgz#c9c5920904d148bab0b9f67145f245a86aadbfa4" - integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== - -"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string-width@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - -string-width@^5.0.1, string-width@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" - integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== - dependencies: - eastasianwidth "^0.2.0" - emoji-regex "^9.2.2" - strip-ansi "^7.0.1" - -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - integrity sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow== - dependencies: - ansi-regex "^3.0.0" - -strip-ansi@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== - dependencies: - ansi-regex "^4.1.0" - -strip-ansi@^7.0.1: - version "7.1.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" - integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== - dependencies: - ansi-regex "^6.0.1" - -strnum@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/strnum/-/strnum-1.0.5.tgz#5c4e829fe15ad4ff0d20c3db5ac97b73c9b072db" - integrity sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA== - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -through@^2.3.6: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== - -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" - -toposort-class@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/toposort-class/-/toposort-class-1.0.1.tgz#7ffd1f78c8be28c3ba45cd4e1a3f5ee193bd9988" - integrity sha512-OsLcGGbYF3rMjPUf8oKktyvCiUxSbqMMS39m33MAjLTC1DVIH6x3WSt63/M77ihI09+Sdfk1AXvfhCEeUmC7mg== - -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== - -tron-format-address@^0.1.11: - version "0.1.11" - resolved "https://registry.yarnpkg.com/tron-format-address/-/tron-format-address-0.1.11.tgz#d4b345e4c62f6024976e764d37b2c30666142603" - integrity sha512-Jx2i3R1yXrEMQsfc2jueAI71ivnySzdeva6SiSM/pddwj8TK7PVABSP6s/iYcTRI63GxJEgGMmOJXNNKoBmbQw== - -ts-node@^10.9.1: - version "10.9.2" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.2.tgz#70f021c9e185bccdca820e26dc413805c101c71f" - integrity sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ== - dependencies: - "@cspotcode/source-map-support" "^0.8.0" - "@tsconfig/node10" "^1.0.7" - "@tsconfig/node12" "^1.0.7" - "@tsconfig/node14" "^1.0.0" - "@tsconfig/node16" "^1.0.2" - acorn "^8.4.1" - acorn-walk "^8.1.1" - arg "^4.1.0" - create-require "^1.1.0" - diff "^4.0.1" - make-error "^1.1.1" - v8-compile-cache-lib "^3.0.1" - yn "3.1.1" - -tslib@2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" - integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== - -tslib@^1.9.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tslib@^2.1.0, tslib@^2.4.0, tslib@^2.6.2: - version "2.6.3" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.3.tgz#0438f810ad7a9edcde7a241c3d80db693c8cbfe0" - integrity sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ== - -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== - -typescript@^5.0.0: - version "5.5.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.5.3.tgz#e1b0a3c394190838a0b168e771b0ad56a0af0faa" - integrity sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ== - -undici-types@~5.26.4: - version "5.26.5" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" - integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== - -undici@^6.12.0: - version "6.19.2" - resolved "https://registry.yarnpkg.com/undici/-/undici-6.19.2.tgz#231bc5de78d0dafb6260cf454b294576c2f3cd31" - integrity sha512-JfjKqIauur3Q6biAtHJ564e3bWa8VvT+7cSiOJHFbX4Erv6CLGDpg8z+Fmg/1OI/47RA+GI2QZaF48SSaLvyBA== - -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== - -uuid@^9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" - integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== - -v8-compile-cache-lib@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" - integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== - -validator@^13.9.0: - version "13.12.0" - resolved "https://registry.yarnpkg.com/validator/-/validator-13.12.0.tgz#7d78e76ba85504da3fee4fd1922b385914d4b35f" - integrity sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg== - -wcwidth@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" - integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== - dependencies: - defaults "^1.0.3" - -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== - -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" - integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" - -which@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -wkx@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/wkx/-/wkx-0.5.0.tgz#c6c37019acf40e517cc6b94657a25a3d4aa33e8c" - integrity sha512-Xng/d4Ichh8uN4l0FToV/258EjMGU9MGcA0HV2d9B/ZpZB3lqQm7nkOdZdm5GhKtLLhAE7PiVQwN4eN+2YJJUg== - dependencies: - "@types/node" "*" - -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrap-ansi@^6.0.1: - 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@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" - integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== - dependencies: - ansi-styles "^6.1.0" - string-width "^5.0.1" - strip-ansi "^7.0.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== - -xtend@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - -yn@3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" - integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== - -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== From bafab705dd65e2549a44ba4854a3e1e9cfc6eca9 Mon Sep 17 00:00:00 2001 From: bergben Date: Thu, 11 Jul 2024 09:47:13 +0200 Subject: [PATCH 016/105] fluid: add arbitrum --- fees/fluid/index.ts | 395 ++++++++++++++++++++++++++++++++------------ 1 file changed, 285 insertions(+), 110 deletions(-) diff --git a/fees/fluid/index.ts b/fees/fluid/index.ts index afe9f70909..087bed196c 100644 --- a/fees/fluid/index.ts +++ b/fees/fluid/index.ts @@ -4,49 +4,229 @@ import BigNumber from "bignumber.js"; import { Adapter, FetchV2 } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -const fluidLiquidity = "0x52aa899454998be5b000ad077a46bbe360f4e497"; - -const fluidRevenueResolverExistAfterBlock = 19784319; -const fluidRevenueResolver = "0x0F683159f14857D61544650607549Cdc21abE774"; -const fluidRevenueResolverAbi = { - calcRevenueSimulatedTime: - "function calcRevenueSimulatedTime(uint256 totalAmounts_,uint256 exchangePricesAndConfig_,uint256 liquidityTokenBalance_,uint256 simulatedTimestamp_) public view returns (uint256 revenueAmount_)", - getRevenue: - "function getRevenue(address token_) public view returns (uint256 revenueAmount_)", +const abis = { + revenueResolver: { + calcRevenueSimulatedTime: + "function calcRevenueSimulatedTime(uint256 totalAmounts_,uint256 exchangePricesAndConfig_,uint256 liquidityTokenBalance_,uint256 simulatedTimestamp_) public view returns (uint256 revenueAmount_)", + getRevenue: + "function getRevenue(address token_) public view returns (uint256 revenueAmount_)", + }, + liquidityResolver: { + listedTokens: + "function listedTokens() public view returns (address[] listedTokens_)", + getExchangePricesAndConfig: + "function getExchangePricesAndConfig(address token_) public view returns (uint256)", + getTotalAmounts: + "function getTotalAmounts(address token_) public view returns (uint256)", + }, + vaultResolver_before_19992222: { + getAllVaultsAddresses: + "function getAllVaultsAddresses() external view returns (address[] vaults_)", + getVaultEntireData: + "function getVaultEntireData(address vault_) view returns ((address vault, (address liquidity, address factory, address adminImplementation, address secondaryImplementation, address supplyToken, address borrowToken, uint8 supplyDecimals, uint8 borrowDecimals, uint256 vaultId, bytes32 liquiditySupplyExchangePriceSlot, bytes32 liquidityBorrowExchangePriceSlot, bytes32 liquidityUserSupplySlot, bytes32 liquidityUserBorrowSlot) constantVariables, (uint16 supplyRateMagnifier, uint16 borrowRateMagnifier, uint16 collateralFactor, uint16 liquidationThreshold, uint16 liquidationMaxLimit, uint16 withdrawalGap, uint16 liquidationPenalty, uint16 borrowFee, address oracle, uint256 oraclePrice, address rebalancer) configs, (uint256 lastStoredLiquiditySupplyExchangePrice, uint256 lastStoredLiquidityBorrowExchangePrice, uint256 lastStoredVaultSupplyExchangePrice, uint256 lastStoredVaultBorrowExchangePrice, uint256 liquiditySupplyExchangePrice, uint256 liquidityBorrowExchangePrice, uint256 vaultSupplyExchangePrice, uint256 vaultBorrowExchangePrice, uint256 supplyRateVault, uint256 borrowRateVault, uint256 supplyRateLiquidity, uint256 borrowRateLiquidity, uint256 rewardsRate) exchangePricesAndRates, (uint256 totalSupplyVault, uint256 totalBorrowVault, uint256 totalSupplyLiquidity, uint256 totalBorrowLiquidity, uint256 absorbedSupply, uint256 absorbedBorrow) totalSupplyAndBorrow, (uint256 withdrawLimit, uint256 withdrawableUntilLimit, uint256 withdrawable, uint256 borrowLimit, uint256 borrowableUntilLimit, uint256 borrowable, uint256 minimumBorrowing) limitsAndAvailability, (uint256 totalPositions, int256 topTick, uint256 currentBranch, uint256 totalBranch, uint256 totalBorrow, uint256 totalSupply, (uint256 status, int256 minimaTick, uint256 debtFactor, uint256 partials, uint256 debtLiquidity, uint256 baseBranchId, int256 baseBranchMinima) currentBranchState) vaultState, (bool modeWithInterest, uint256 supply, uint256 withdrawalLimit, uint256 lastUpdateTimestamp, uint256 expandPercent, uint256 expandDuration, uint256 baseWithdrawalLimit, uint256 withdrawableUntilLimit, uint256 withdrawable) liquidityUserSupplyData, (bool modeWithInterest, uint256 borrow, uint256 borrowLimit, uint256 lastUpdateTimestamp, uint256 expandPercent, uint256 expandDuration, uint256 baseBorrowLimit, uint256 maxBorrowLimit, uint256 borrowableUntilLimit, uint256 borrowable) liquidityUserBorrowData) vaultData_)", + }, + vaultResolver_after_19992222: { + getAllVaultsAddresses: + "function getAllVaultsAddresses() external view returns (address[] vaults_)", + getVaultEntireData: + "function getVaultEntireData(address vault_) view returns ((address vault, (address liquidity, address factory, address adminImplementation, address secondaryImplementation, address supplyToken, address borrowToken, uint8 supplyDecimals, uint8 borrowDecimals, uint256 vaultId, bytes32 liquiditySupplyExchangePriceSlot, bytes32 liquidityBorrowExchangePriceSlot, bytes32 liquidityUserSupplySlot, bytes32 liquidityUserBorrowSlot) constantVariables, (uint16 supplyRateMagnifier, uint16 borrowRateMagnifier, uint16 collateralFactor, uint16 liquidationThreshold, uint16 liquidationMaxLimit, uint16 withdrawalGap, uint16 liquidationPenalty, uint16 borrowFee, address oracle, uint256 oraclePriceOperate, uint256 oraclePriceLiquidate, address rebalancer) configs, (uint256 lastStoredLiquiditySupplyExchangePrice, uint256 lastStoredLiquidityBorrowExchangePrice, uint256 lastStoredVaultSupplyExchangePrice, uint256 lastStoredVaultBorrowExchangePrice, uint256 liquiditySupplyExchangePrice, uint256 liquidityBorrowExchangePrice, uint256 vaultSupplyExchangePrice, uint256 vaultBorrowExchangePrice, uint256 supplyRateVault, uint256 borrowRateVault, uint256 supplyRateLiquidity, uint256 borrowRateLiquidity, uint256 rewardsRate) exchangePricesAndRates, (uint256 totalSupplyVault, uint256 totalBorrowVault, uint256 totalSupplyLiquidity, uint256 totalBorrowLiquidity, uint256 absorbedSupply, uint256 absorbedBorrow) totalSupplyAndBorrow, (uint256 withdrawLimit, uint256 withdrawableUntilLimit, uint256 withdrawable, uint256 borrowLimit, uint256 borrowableUntilLimit, uint256 borrowable, uint256 borrowLimitUtilization, uint256 minimumBorrowing) limitsAndAvailability, (uint256 totalPositions, int256 topTick, uint256 currentBranch, uint256 totalBranch, uint256 totalBorrow, uint256 totalSupply, (uint256 status, int256 minimaTick, uint256 debtFactor, uint256 partials, uint256 debtLiquidity, uint256 baseBranchId, int256 baseBranchMinima) currentBranchState) vaultState, (bool modeWithInterest, uint256 supply, uint256 withdrawalLimit, uint256 lastUpdateTimestamp, uint256 expandPercent, uint256 expandDuration, uint256 baseWithdrawalLimit, uint256 withdrawableUntilLimit, uint256 withdrawable) liquidityUserSupplyData, (bool modeWithInterest, uint256 borrow, uint256 borrowLimit, uint256 lastUpdateTimestamp, uint256 expandPercent, uint256 expandDuration, uint256 baseBorrowLimit, uint256 maxBorrowLimit, uint256 borrowableUntilLimit, uint256 borrowable, uint256 borrowLimitUtilization) liquidityUserBorrowData) vaultData_)", + }, + vault: { + constantsView: + "function constantsView() public view returns((address liquidity,address factory,address adminImplementation,address secondaryImplementation,address supplyToken,address borrowToken,uint8 supplyDecimals,uint8 borrowDecimals,uint vaultId,bytes32 liquiditySupplyExchangePriceSlot,bytes32 liquidityBorrowExchangePriceSlot,bytes32 liquidityUserSupplySlot,bytes32 liquidityUserBorrowSlot))", + }, }; -const fluidLiquidityResolver = "0x741c2Cd25f053a55fd94afF1afAEf146523E1249"; -const fluidLiquidityResolverAbi = { - listedTokens: - "function listedTokens() public view returns (address[] listedTokens_)", - getExchangePricesAndConfig: - "function getExchangePricesAndConfig(address token_) public view returns (uint256)", - getTotalAmounts: - "function getTotalAmounts(address token_) public view returns (uint256)", +const revenueResolver = async (api: sdk.ChainApi) => { + const block = await api.getBlock(); + + let address; + let abi = abis.revenueResolver; + switch (api.chain) { + case CHAIN.ETHEREUM: + if (block < 19784319) { + break; // fluid RevenueResolver Exist After Block 19784319 + } + if (block < 20138676) { + address = "0x0F683159f14857D61544650607549Cdc21abE774"; + break; + } + address = "0xFe4affaD55c7AeC012346195654634F7C786fA2c"; + break; + case CHAIN.ARBITRUM: + address = "0xFe4affaD55c7AeC012346195654634F7C786fA2c"; + break; + } + + return { + calcRevenueSimulatedTime: async ( + totalAmounts: string, + exchangePricesAndConfig: string, + liquidityTokenBalance: string | BigNumber, + timestamp: string | number + ) => { + if (!address) { + return 0; + } + + return await api.call({ + target: address, + abi: abi.calcRevenueSimulatedTime, + params: [ + totalAmounts, + exchangePricesAndConfig, + liquidityTokenBalance as string, + timestamp, + ], + }); + }, + getRevenue: async (token: string) => { + if (!address) { + return 0; + } + + return await api.call({ + target: address, + abi: abi.getRevenue, + params: [token], + }); + }, + }; }; -// up until block 19662786, must use historical resolver as new one had not been deployed yet -const vaultResolverExistAfterTimestamp = 1708931052; // vault resolver related revenue only exists after this timestamp. revenue / fees before are negligible -const vaultResolverExistAfterBlock = 19313700; // vault resolver related revenue only exists after this timestamp. revenue / fees before are negligible -const vaultResolverHistoricalBlock = 19662786; -const fluidVaultResolverHistorical = - "0x8DD65DaDb217f73A94Efb903EB2dc7B49D97ECca"; -const fluidVaultResolver = "0x93CAB6529aD849b2583EBAe32D13817A2F38cEb4"; -const fluidVaultResolverAbi = { - getAllVaultsAddresses: - "function getAllVaultsAddresses() external view returns (address[] vaults_)", - getVaultEntireData: - "function getVaultEntireData(address vault_) view returns ((address vault, (address liquidity, address factory, address adminImplementation, address secondaryImplementation, address supplyToken, address borrowToken, uint8 supplyDecimals, uint8 borrowDecimals, uint256 vaultId, bytes32 liquiditySupplyExchangePriceSlot, bytes32 liquidityBorrowExchangePriceSlot, bytes32 liquidityUserSupplySlot, bytes32 liquidityUserBorrowSlot) constantVariables, (uint16 supplyRateMagnifier, uint16 borrowRateMagnifier, uint16 collateralFactor, uint16 liquidationThreshold, uint16 liquidationMaxLimit, uint16 withdrawalGap, uint16 liquidationPenalty, uint16 borrowFee, address oracle, uint256 oraclePrice, address rebalancer) configs, (uint256 lastStoredLiquiditySupplyExchangePrice, uint256 lastStoredLiquidityBorrowExchangePrice, uint256 lastStoredVaultSupplyExchangePrice, uint256 lastStoredVaultBorrowExchangePrice, uint256 liquiditySupplyExchangePrice, uint256 liquidityBorrowExchangePrice, uint256 vaultSupplyExchangePrice, uint256 vaultBorrowExchangePrice, uint256 supplyRateVault, uint256 borrowRateVault, uint256 supplyRateLiquidity, uint256 borrowRateLiquidity, uint256 rewardsRate) exchangePricesAndRates, (uint256 totalSupplyVault, uint256 totalBorrowVault, uint256 totalSupplyLiquidity, uint256 totalBorrowLiquidity, uint256 absorbedSupply, uint256 absorbedBorrow) totalSupplyAndBorrow, (uint256 withdrawLimit, uint256 withdrawableUntilLimit, uint256 withdrawable, uint256 borrowLimit, uint256 borrowableUntilLimit, uint256 borrowable, uint256 minimumBorrowing) limitsAndAvailability, (uint256 totalPositions, int256 topTick, uint256 currentBranch, uint256 totalBranch, uint256 totalBorrow, uint256 totalSupply, (uint256 status, int256 minimaTick, uint256 debtFactor, uint256 partials, uint256 debtLiquidity, uint256 baseBranchId, int256 baseBranchMinima) currentBranchState) vaultState, (bool modeWithInterest, uint256 supply, uint256 withdrawalLimit, uint256 lastUpdateTimestamp, uint256 expandPercent, uint256 expandDuration, uint256 baseWithdrawalLimit, uint256 withdrawableUntilLimit, uint256 withdrawable) liquidityUserSupplyData, (bool modeWithInterest, uint256 borrow, uint256 borrowLimit, uint256 lastUpdateTimestamp, uint256 expandPercent, uint256 expandDuration, uint256 baseBorrowLimit, uint256 maxBorrowLimit, uint256 borrowableUntilLimit, uint256 borrowable) liquidityUserBorrowData) vaultData_)", +const liquidityResolver = async (api: sdk.ChainApi) => { + const block = await api.getBlock(); + + let address; + let abi = abis.liquidityResolver; + switch (api.chain) { + case CHAIN.ETHEREUM: + if (block < 19992056) { + address = "0x741c2Cd25f053a55fd94afF1afAEf146523E1249"; + break; + } + address = "0xD7588F6c99605Ab274C211a0AFeC60947668A8Cb"; + break; + case CHAIN.ARBITRUM: + address = "0x46859d33E662d4bF18eEED88f74C36256E606e44"; + break; + } + + return { + listedTokens: async () => { + if (!address) { + return []; + } + + return await api.call({ + target: address, + abi: abi.listedTokens, + params: undefined, + }); + }, + getExchangePricesAndConfig: async (token: string) => { + if (!address) { + return 0; + } + + return await api.call({ + target: address, + abi: abi.getExchangePricesAndConfig, + params: [token], + }); + }, + getTotalAmounts: async (token: string) => { + if (!address) { + return 0; + } + + return await api.call({ + target: address, + abi: abi.getTotalAmounts, + params: [token], + }); + }, + }; }; -const fluidVaultResolverTarget = async (api: sdk.ChainApi) => { - return (await api.getBlock()) > vaultResolverHistoricalBlock - ? fluidVaultResolver - : fluidVaultResolverHistorical; + +const vaultResolver = async (api: sdk.ChainApi) => { + const block = await api.getBlock(); + + let address; + let abi = abis.vaultResolver_after_19992222; + switch (api.chain) { + case CHAIN.ETHEREUM: + if (block < 19313700) { + // vault resolver related revenue only exists after this block. revenue / fees before are negligible + break; + } + + if (block < 19662786) { + address = "0x8DD65DaDb217f73A94Efb903EB2dc7B49D97ECca"; + abi = abis.vaultResolver_before_19992222; + break; + } + if (block < 19992222) { + address = "0x93CAB6529aD849b2583EBAe32D13817A2F38cEb4"; + abi = abis.vaultResolver_before_19992222; + break; + } + address = "0x56ddF84B2c94BF3361862FcEdB704C382dc4cd32"; + break; + case CHAIN.ARBITRUM: + if (block < 228361633) { + // vault resolver related revenue only exists after this block. no revenue / fees before + break; + } + address = "0x77648D39be25a1422467060e11E5b979463bEA3d"; + + break; + } + + return { + getAllVaultsAddresses: async () => { + if (!address) { + return []; + } + + return await api.call({ + target: address, + abi: abi.getAllVaultsAddresses, + params: undefined, + }); + }, + getVaultEntireData: async (vault: string) => { + if (!address) { + return null; + } + + return await api.call({ + target: address, + abi: abi.getVaultEntireData, + params: [vault], + }); + }, + }; }; -const fluidVaultAbi = { - constantsView: - "function constantsView() public view returns((address liquidity,address factory,address adminImplementation,address secondaryImplementation,address supplyToken,address borrowToken,uint8 supplyDecimals,uint8 borrowDecimals,uint vaultId,bytes32 liquiditySupplyExchangePriceSlot,bytes32 liquidityBorrowExchangePriceSlot,bytes32 liquidityUserSupplySlot,bytes32 liquidityUserBorrowSlot))", +const config = { + liquidity: "0x52aa899454998be5b000ad077a46bbe360f4e497", + ethereum: { + dataStartTimestamp: 1708246655, // ~ when liquidity resolver was deployed + + revenueResolverExistAfterBlock: 19959852, + // vault resolver related revenue only exists after this timestamp. revenue / fees before are negligible + vaultResolverExistAfterTimestamp: 1708931052, + vaultResolverExistAfterBlock: 19313700, + }, + arbitrum: { + dataStartTimestamp: 1718020611, // ~ when liquidity resolver was deployed (block 220375236) + + revenueResolverExistAfterBlock: 0, + // vault resolver related revenue only exists after this timestamp. revenue / fees before are negligible + vaultResolverExistAfterTimestamp: 0, + vaultResolverExistAfterBlock: 0, + }, }; const methodologyFluid = { @@ -54,13 +234,19 @@ const methodologyFluid = { Revenue: "Percentage of interest going to treasury", }; -const dataStartTimestamp = 1708246655; // ~ when liquidity resolver was deployed - const fetch: FetchV2 = async ({ api, fromTimestamp, toTimestamp }) => { return { - // totalFees: await getFeesFromTo(api, dataStartTimestamp, toTimestamp), + // totalFees: await getFeesFromTo( + // api, + // config[api.chain].dataStartTimestamp, + // toTimestamp + // ), dailyFees: await getFeesFromTo(api, fromTimestamp, toTimestamp), - // totalRevenue: await getRevenueFromTo(api, dataStartTimestamp, toTimestamp), + // totalRevenue: await getRevenueFromTo( + // api, + // config[api.chain].dataStartTimestamp, + // toTimestamp + // ), dailyRevenue: await getRevenueFromTo(api, fromTimestamp, toTimestamp), }; }; @@ -69,7 +255,14 @@ const adapter: Adapter = { adapter: { [CHAIN.ETHEREUM]: { fetch, - start: dataStartTimestamp, + start: config.ethereum.dataStartTimestamp, + meta: { + methodology: methodologyFluid, + }, + }, + [CHAIN.ARBITRUM]: { + fetch, + start: config.arbitrum.dataStartTimestamp, meta: { methodology: methodologyFluid, }, @@ -87,16 +280,16 @@ const getFeesFromTo = async ( let fromBlock = (await getBlock(api.chain, fromTimestamp)).number; const toBlock = (await getBlock(api.chain, toTimestamp)).number; - if (fromTimestamp < vaultResolverExistAfterTimestamp) { - fromTimestamp = vaultResolverExistAfterTimestamp; - fromBlock = vaultResolverExistAfterBlock; + if (fromTimestamp < config[api.chain].vaultResolverExistAfterTimestamp) { + fromTimestamp = config[api.chain].vaultResolverExistAfterTimestamp; + fromBlock = config[api.chain].vaultResolverExistAfterBlock; } if (fromTimestamp >= toTimestamp) { return 0; } const liquidityOperateLogs = (await sdk.getEventLogs({ - target: fluidLiquidity, + target: config.liquidity, fromBlock, toBlock, chain: api.chain, @@ -113,20 +306,17 @@ const getFeesFromTo = async ( chain: api.chain, block: toBlock, }); - const vaults: string[] = await toApi.call({ - target: await fluidVaultResolverTarget(toApi), - abi: fluidVaultResolverAbi.getAllVaultsAddresses, - }); + const vaults: string[] = await ( + await vaultResolver(toApi) + ).getAllVaultsAddresses(); for await (const vault of vaults) { let borrowBalance = new BigNumber(0); let borrowToken = ""; try { - const { constantVariables, totalSupplyAndBorrow } = await fromApi.call({ - target: await fluidVaultResolverTarget(fromApi), - abi: fluidVaultResolverAbi.getVaultEntireData, - params: [vault], - }); + const { constantVariables, totalSupplyAndBorrow } = await ( + await vaultResolver(fromApi) + ).getVaultEntireData(vault); borrowToken = constantVariables.borrowToken; borrowBalance = new BigNumber(totalSupplyAndBorrow.totalBorrowVault); @@ -137,7 +327,7 @@ const getFeesFromTo = async ( if (!borrowToken) { const { borrowToken: vaultBorrowToken } = await toApi.call({ target: vault, - abi: fluidVaultAbi.constantsView, + abi: abis.vault.constantsView, }); borrowToken = vaultBorrowToken; } @@ -154,13 +344,9 @@ const getFeesFromTo = async ( } try { - const { totalSupplyAndBorrow: totalSupplyAndBorrowTo } = await toApi.call( - { - target: await fluidVaultResolverTarget(toApi), - abi: fluidVaultResolverAbi.getVaultEntireData, - params: [vault], - } - ); + const { totalSupplyAndBorrow: totalSupplyAndBorrowTo } = await ( + await vaultResolver(toApi) + ).getVaultEntireData(vault); toApi.addToken( borrowToken, @@ -193,13 +379,10 @@ const getLiquidityRevenueFromTo = async ( fromTimestamp: number, toTimestamp: number ) => { - const tokens: string[] = await api.call({ - target: fluidLiquidityResolver, - abi: fluidLiquidityResolverAbi.listedTokens, - }); + const tokens: string[] = await (await liquidityResolver(api)).listedTokens(); const collectRevenueLogs: [string, BigNumber][] = (await sdk.getEventLogs({ - target: fluidLiquidity, + target: config.liquidity, fromBlock: (await getBlock(api.chain, fromTimestamp)).number, toBlock: (await getBlock(api.chain, toTimestamp)).number, chain: api.chain, @@ -260,31 +443,28 @@ const getLiquidityUncollectedRevenueAt = async ( // check if token was listed at that timestamp at Liquidity, if not, revenue is 0 if ( !( - (await timestampedApi.call({ - target: fluidLiquidityResolver, - abi: fluidLiquidityResolverAbi.listedTokens, - })) as string[] + (await ( + await liquidityResolver(timestampedApi) + ).listedTokens()) as string[] ).includes(token) ) { return new BigNumber(0); } // get liquidity packed storage slots data at timestamped Api block number - const totalAmounts = await timestampedApi.call({ - target: fluidLiquidityResolver, - abi: fluidLiquidityResolverAbi.getTotalAmounts, - params: [token], - }); - const exchangePricesAndConfig = await timestampedApi.call({ - target: fluidLiquidityResolver, - abi: fluidLiquidityResolverAbi.getExchangePricesAndConfig, - params: [token], - }); + const totalAmounts = await ( + await liquidityResolver(timestampedApi) + ).getTotalAmounts(token); + + const exchangePricesAndConfig = await ( + await liquidityResolver(timestampedApi) + ).getExchangePricesAndConfig(token); + let liquidityTokenBalance: BigNumber | string; if (token.toLowerCase() == "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee") { liquidityTokenBalance = ( await sdk.api.eth.getBalance({ - target: fluidLiquidity, + target: config.liquidity, block: await timestampedApi.getBlock(), }) ).output; @@ -292,26 +472,25 @@ const getLiquidityUncollectedRevenueAt = async ( liquidityTokenBalance = await timestampedApi.call({ target: token, abi: "erc20:balanceOf", - params: [fluidLiquidity], + params: [config.liquidity], }); } // pass data into revenue resolver, available at current api block, which calculates revenue at the // simulated timestamp based on storage slots data - - const uncollectedRevenue = await new sdk.ChainApi({ - chain: api.chain, - block: fluidRevenueResolverExistAfterBlock, - }).call({ - target: fluidRevenueResolver, - abi: fluidRevenueResolverAbi.calcRevenueSimulatedTime, - params: [ - totalAmounts, - exchangePricesAndConfig, - liquidityTokenBalance, - timestamp, - ], - }); + const uncollectedRevenue = await ( + await revenueResolver( + new sdk.ChainApi({ + chain: api.chain, + block: config[api.chain].revenueResolverExistAfterBlock, + }) + ) + )?.calcRevenueSimulatedTime( + totalAmounts, + exchangePricesAndConfig, + liquidityTokenBalance, + timestamp + ); return new BigNumber(uncollectedRevenue); }; @@ -321,7 +500,7 @@ const getVaultsMagnifierRevenueFromTo = async ( fromTimestamp: number, toTimestamp: number ) => { - if (toTimestamp < vaultResolverExistAfterTimestamp) { + if (toTimestamp < config[api.chain].vaultResolverExistAfterTimestamp) { return 0; } @@ -335,10 +514,9 @@ const getVaultsMagnifierRevenueFromTo = async ( chain: api.chain, }); - const vaults: string[] = await toBalancesApi.call({ - target: await fluidVaultResolverTarget(toBalancesApi), - abi: fluidVaultResolverAbi.getAllVaultsAddresses, - }); + const vaults: string[] = await ( + await vaultResolver(toBalancesApi) + ).getAllVaultsAddresses(); for await (const vault of vaults) { fromBalancesApi = await getVaultMagnifierUncollectedRevenueAt( @@ -405,7 +583,7 @@ const getVaultMagnifierCollectedRevenueFromTo = async ( // get collateral and borrow token of the vault const { supplyToken, borrowToken } = await api.call({ target: vault, - abi: fluidVaultAbi.constantsView, + abi: abis.vault.constantsView, }); for await (const log of rebalanceEventLogs) { @@ -428,7 +606,7 @@ const getVaultMagnifierUncollectedRevenueAt = async ( vault: string, balancesApi: sdk.ChainApi ) => { - if (timestamp < vaultResolverExistAfterTimestamp) { + if (timestamp < config[api.chain].vaultResolverExistAfterTimestamp) { // vault resolver related revenue only exists after this timestamp. before this there has been no such revenue. return balancesApi; } @@ -441,12 +619,9 @@ const getVaultMagnifierUncollectedRevenueAt = async ( }); try { - const { totalSupplyAndBorrow, constantVariables } = - await timestampedApi.call({ - target: await fluidVaultResolverTarget(timestampedApi), - abi: fluidVaultResolverAbi.getVaultEntireData, - params: [vault], - }); + const { totalSupplyAndBorrow, constantVariables } = await ( + await vaultResolver(timestampedApi) + ).getVaultEntireData(vault); const totalSupplyVault = new BigNumber( totalSupplyAndBorrow.totalSupplyVault From 31875726d7b47cc2f10e5c73a3f84ee6919a6c29 Mon Sep 17 00:00:00 2001 From: bergben Date: Thu, 11 Jul 2024 09:47:13 +0200 Subject: [PATCH 017/105] feat(fluid): simplify arbitrum config --- fees/fluid/index.ts | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/fees/fluid/index.ts b/fees/fluid/index.ts index 087bed196c..605a175326 100644 --- a/fees/fluid/index.ts +++ b/fees/fluid/index.ts @@ -174,12 +174,7 @@ const vaultResolver = async (api: sdk.ChainApi) => { address = "0x56ddF84B2c94BF3361862FcEdB704C382dc4cd32"; break; case CHAIN.ARBITRUM: - if (block < 228361633) { - // vault resolver related revenue only exists after this block. no revenue / fees before - break; - } address = "0x77648D39be25a1422467060e11E5b979463bEA3d"; - break; } @@ -220,12 +215,12 @@ const config = { vaultResolverExistAfterBlock: 19313700, }, arbitrum: { - dataStartTimestamp: 1718020611, // ~ when liquidity resolver was deployed (block 220375236) + dataStartTimestamp: 1720018638, // ~ before any activity started (block 228361633) - revenueResolverExistAfterBlock: 0, + revenueResolverExistAfterBlock: 228361632, // vault resolver related revenue only exists after this timestamp. revenue / fees before are negligible - vaultResolverExistAfterTimestamp: 0, - vaultResolverExistAfterBlock: 0, + vaultResolverExistAfterTimestamp: 1720018637, + vaultResolverExistAfterBlock: 228361632, }, }; From e6a0c55b630afdb173393f9d8fbbe8b8583afe29 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 11 Jul 2024 14:16:08 +0000 Subject: [PATCH 018/105] add uniswap more chain --- helpers/chains.ts | 2 +- protocols/uniswap/index.ts | 154 ++++++++++++++++++++++--------------- 2 files changed, 92 insertions(+), 64 deletions(-) diff --git a/helpers/chains.ts b/helpers/chains.ts index 424fcd0187..8b051570a0 100644 --- a/helpers/chains.ts +++ b/helpers/chains.ts @@ -157,7 +157,7 @@ export enum CHAIN { PLANQ = "planq", BOB = "bob", TAIKO = "taiko", - SKALE_EUROPA = "skale_europa" + SKALE_EUROPA = "skale_europa", } // DonĀ“t use diff --git a/protocols/uniswap/index.ts b/protocols/uniswap/index.ts index 5e16e7ac4b..6b90767b28 100644 --- a/protocols/uniswap/index.ts +++ b/protocols/uniswap/index.ts @@ -67,14 +67,14 @@ const KEY = 'a265c39f5a123ab2d40b25dc352adc22' const v3Endpoints = { [CHAIN.ETHEREUM]: sdk.graph.modifyEndpoint('5AXe97hGLfjgFAc6Xvg6uDpsD5hqpxrxcma9MoxG7j7h'), - [CHAIN.OPTIMISM]: sdk.graph.modifyEndpoint('Jhu62RoQqrrWoxUUhWFkiMHDrqsTe7hTGb3NGiHPuf9'), - [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/id/QmZ5uwhnwsJXAQGYEF8qKPQ85iVhYAcVZcZAPfrF7ZNb9z", - // [CHAIN.POLYGON]: "https://gateway-arbitrum.network.thegraph.com/api/"+KEY+"/subgraphs/id/3hCPRGf4z88VC5rsBKU5AA9FBBq5nF3jbKJG7VZCbhjm", - // [CHAIN.CELO]: sdk.graph.modifyEndpoint('ESdrTJ3twMwWVoQ1hUE2u7PugEHX3QkenudD6aXCkDQ4'), - [CHAIN.BSC]: sdk.graph.modifyEndpoint('F85MNzUGYqgSHSHRGgeVMNsdnW1KtZSVgFULumXRZTw2'), - // [CHAIN.AVAX]: sdk.graph.modifyEndpoint('4gTHdWa9PbqUugt9vsMmpzUowmjb6eRiFRnUSrYLeSJF'), - [CHAIN.BASE]: sdk.graph.modifyEndpoint('43Hwfi3dJSoGpyas9VwNoDAv55yjgGrPpNSmbQZArzMG'), - [CHAIN.ERA]: "https://api.thegraph.com/subgraphs/name/freakyfractal/uniswap-v3-zksync-era" + // [CHAIN.OPTIMISM]: sdk.graph.modifyEndpoint('Jhu62RoQqrrWoxUUhWFkiMHDrqsTe7hTGb3NGiHPuf9'), + // [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/id/QmZ5uwhnwsJXAQGYEF8qKPQ85iVhYAcVZcZAPfrF7ZNb9z", + // // [CHAIN.POLYGON]: "https://gateway-arbitrum.network.thegraph.com/api/"+KEY+"/subgraphs/id/3hCPRGf4z88VC5rsBKU5AA9FBBq5nF3jbKJG7VZCbhjm", + // // [CHAIN.CELO]: sdk.graph.modifyEndpoint('ESdrTJ3twMwWVoQ1hUE2u7PugEHX3QkenudD6aXCkDQ4'), + // [CHAIN.BSC]: sdk.graph.modifyEndpoint('F85MNzUGYqgSHSHRGgeVMNsdnW1KtZSVgFULumXRZTw2'), + // // [CHAIN.AVAX]: sdk.graph.modifyEndpoint('4gTHdWa9PbqUugt9vsMmpzUowmjb6eRiFRnUSrYLeSJF'), + // [CHAIN.BASE]: sdk.graph.modifyEndpoint('43Hwfi3dJSoGpyas9VwNoDAv55yjgGrPpNSmbQZArzMG'), + // [CHAIN.ERA]: "https://api.thegraph.com/subgraphs/name/freakyfractal/uniswap-v3-zksync-era" }; const VOLUME_USD = "volumeUSD"; @@ -231,60 +231,60 @@ const fetchV2 = async (options: FetchOptions) => { const adapter: BreakdownAdapter = { version: 2, breakdown: { - v1: { - [CHAIN.ETHEREUM]: { - fetch: async (options) => { - const response = await v1Graph(options.chain)(options); - const keys = { - "dailyUserFees": options.createBalances(), - "dailyProtocolRevenue": options.createBalances(), - "dailySupplySideRevenue": options.createBalances(), - "dailyHoldersRevenue": options.createBalances(), - "dailyRevenue": options.createBalances(), - "dailyFees": options.createBalances(), - }; - for (const key of Object.keys(keys)) { - if (typeof response[key] === 'string') { - keys[key].add(ETH_ADDRESS, Number(response[key]) * 1e18); - } - } - return response as FetchResultGeneric - }, - start: 1541203200, - meta: { - methodology - }, - }, - }, - v2: { - [CHAIN.ETHEREUM]: { - fetch: async (options) => { - const response = await v2Graph(options.chain)(options); - response.totalVolume = - Number(response.dailyVolume) + 1079453198606.2229; - response.totalFees = Number(response.totalVolume) * 0.003; - response.totalUserFees = Number(response.totalVolume) * 0.003; - response.totalSupplySideRevenue = Number(response.totalVolume) * 0.003; - return { - ...response, - } - }, - start: getStartTimestamp({ - endpoints: v2Endpoints, - chain: CHAIN.ETHEREUM, - }), - meta: { - methodology - }, - }, - ...Object.keys(chainv2mapping).reduce((acc, chain) => { - acc[chain] = { - fetch: fetchV2, - start: 0, - } - return acc - }, {}) - }, + // v1: { + // [CHAIN.ETHEREUM]: { + // fetch: async (options) => { + // const response = await v1Graph(options.chain)(options); + // const keys = { + // "dailyUserFees": options.createBalances(), + // "dailyProtocolRevenue": options.createBalances(), + // "dailySupplySideRevenue": options.createBalances(), + // "dailyHoldersRevenue": options.createBalances(), + // "dailyRevenue": options.createBalances(), + // "dailyFees": options.createBalances(), + // }; + // for (const key of Object.keys(keys)) { + // if (typeof response[key] === 'string') { + // keys[key].add(ETH_ADDRESS, Number(response[key]) * 1e18); + // } + // } + // return response as FetchResultGeneric + // }, + // start: 1541203200, + // meta: { + // methodology + // }, + // }, + // }, + // v2: { + // [CHAIN.ETHEREUM]: { + // fetch: async (options) => { + // const response = await v2Graph(options.chain)(options); + // response.totalVolume = + // Number(response.dailyVolume) + 1079453198606.2229; + // response.totalFees = Number(response.totalVolume) * 0.003; + // response.totalUserFees = Number(response.totalVolume) * 0.003; + // response.totalSupplySideRevenue = Number(response.totalVolume) * 0.003; + // return { + // ...response, + // } + // }, + // start: getStartTimestamp({ + // endpoints: v2Endpoints, + // chain: CHAIN.ETHEREUM, + // }), + // meta: { + // methodology + // }, + // }, + // ...Object.keys(chainv2mapping).reduce((acc, chain) => { + // acc[chain] = { + // fetch: fetchV2, + // start: 0, + // } + // return acc + // }, {}) + // }, v3: Object.keys(v3Endpoints).reduce((acc, chain) => { acc[chain] = { fetch: v3Graphs(chain as Chain), @@ -307,7 +307,7 @@ interface ISeiResponse { } const fetchSei = async (options: FetchOptions) => { try { - const url = `https://omni.icarus.tools/${options.chain}/cush/analyticsProtocolHistoric`; + const url = `https://omni.icarus.tools/${mappingChain(options.chain)}/cush/analyticsProtocolHistoric`; const body = { "params": [ options.startTimestamp * 1000, //start @@ -327,6 +327,10 @@ const fetchSei = async (options: FetchOptions) => { return {} } } +const mappingChain = (chain: string) => { + if (chain === CHAIN.ERA) return "zksync" + return chain +} adapter.breakdown.v3[CHAIN.SEI] = { fetch: fetchSei, @@ -335,5 +339,29 @@ adapter.breakdown.v3[CHAIN.SEI] = { methodology } } +adapter.breakdown.v3[CHAIN.ERA] = { + fetch: fetchSei, + start: 0, + meta: { + methodology + } +} + +adapter.breakdown.v3[CHAIN.TAIKO] = { + fetch: fetchSei, + start: 0, + meta: { + methodology + } +} + +adapter.breakdown.v3[CHAIN.SCROLL] = { + fetch: fetchSei, + start: 0, + meta: { + methodology + } +} + export default adapter; From e75c2db6264ddf2b9bdd9d22a9a819816900e746 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 11 Jul 2024 14:21:54 +0000 Subject: [PATCH 019/105] fix chain --- fees/gamma.ts | 2 +- helpers/chains.ts | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/fees/gamma.ts b/fees/gamma.ts index b20791c627..3d3a253ad9 100644 --- a/fees/gamma.ts +++ b/fees/gamma.ts @@ -161,7 +161,7 @@ const adapter: SimpleAdapter = { fetch: fetchFees("taiko"), start: 1682121600, }, - [CHAIN.RSK]: { + [CHAIN.ROOTSTOCK]: { fetch: fetchFees("rootstock"), start: 1682121600, }, diff --git a/helpers/chains.ts b/helpers/chains.ts index 424fcd0187..e930ab326d 100644 --- a/helpers/chains.ts +++ b/helpers/chains.ts @@ -157,7 +157,8 @@ export enum CHAIN { PLANQ = "planq", BOB = "bob", TAIKO = "taiko", - SKALE_EUROPA = "skale_europa" + SKALE_EUROPA = "skale_europa", + IOTAEVM = "iotaevm", } // DonĀ“t use From cb9237831c5fe275165a38025254fbc36e248dc8 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 11 Jul 2024 15:49:25 +0000 Subject: [PATCH 020/105] add more --- protocols/uniswap/index.ts | 180 ++++++++++++++++++++++++------------- 1 file changed, 118 insertions(+), 62 deletions(-) diff --git a/protocols/uniswap/index.ts b/protocols/uniswap/index.ts index 6b90767b28..1312f71932 100644 --- a/protocols/uniswap/index.ts +++ b/protocols/uniswap/index.ts @@ -67,14 +67,14 @@ const KEY = 'a265c39f5a123ab2d40b25dc352adc22' const v3Endpoints = { [CHAIN.ETHEREUM]: sdk.graph.modifyEndpoint('5AXe97hGLfjgFAc6Xvg6uDpsD5hqpxrxcma9MoxG7j7h'), - // [CHAIN.OPTIMISM]: sdk.graph.modifyEndpoint('Jhu62RoQqrrWoxUUhWFkiMHDrqsTe7hTGb3NGiHPuf9'), - // [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/id/QmZ5uwhnwsJXAQGYEF8qKPQ85iVhYAcVZcZAPfrF7ZNb9z", - // // [CHAIN.POLYGON]: "https://gateway-arbitrum.network.thegraph.com/api/"+KEY+"/subgraphs/id/3hCPRGf4z88VC5rsBKU5AA9FBBq5nF3jbKJG7VZCbhjm", - // // [CHAIN.CELO]: sdk.graph.modifyEndpoint('ESdrTJ3twMwWVoQ1hUE2u7PugEHX3QkenudD6aXCkDQ4'), - // [CHAIN.BSC]: sdk.graph.modifyEndpoint('F85MNzUGYqgSHSHRGgeVMNsdnW1KtZSVgFULumXRZTw2'), - // // [CHAIN.AVAX]: sdk.graph.modifyEndpoint('4gTHdWa9PbqUugt9vsMmpzUowmjb6eRiFRnUSrYLeSJF'), - // [CHAIN.BASE]: sdk.graph.modifyEndpoint('43Hwfi3dJSoGpyas9VwNoDAv55yjgGrPpNSmbQZArzMG'), - // [CHAIN.ERA]: "https://api.thegraph.com/subgraphs/name/freakyfractal/uniswap-v3-zksync-era" + [CHAIN.OPTIMISM]: sdk.graph.modifyEndpoint('Jhu62RoQqrrWoxUUhWFkiMHDrqsTe7hTGb3NGiHPuf9'), + [CHAIN.ARBITRUM]: "https://api.thegraph.com/subgraphs/id/QmZ5uwhnwsJXAQGYEF8qKPQ85iVhYAcVZcZAPfrF7ZNb9z", + // [CHAIN.POLYGON]: "https://gateway-arbitrum.network.thegraph.com/api/"+KEY+"/subgraphs/id/3hCPRGf4z88VC5rsBKU5AA9FBBq5nF3jbKJG7VZCbhjm", + // [CHAIN.CELO]: sdk.graph.modifyEndpoint('ESdrTJ3twMwWVoQ1hUE2u7PugEHX3QkenudD6aXCkDQ4'), + [CHAIN.BSC]: sdk.graph.modifyEndpoint('F85MNzUGYqgSHSHRGgeVMNsdnW1KtZSVgFULumXRZTw2'), + // [CHAIN.AVAX]: sdk.graph.modifyEndpoint('4gTHdWa9PbqUugt9vsMmpzUowmjb6eRiFRnUSrYLeSJF'), + [CHAIN.BASE]: sdk.graph.modifyEndpoint('43Hwfi3dJSoGpyas9VwNoDAv55yjgGrPpNSmbQZArzMG'), + [CHAIN.ERA]: "https://api.thegraph.com/subgraphs/name/freakyfractal/uniswap-v3-zksync-era" }; const VOLUME_USD = "volumeUSD"; @@ -231,60 +231,60 @@ const fetchV2 = async (options: FetchOptions) => { const adapter: BreakdownAdapter = { version: 2, breakdown: { - // v1: { - // [CHAIN.ETHEREUM]: { - // fetch: async (options) => { - // const response = await v1Graph(options.chain)(options); - // const keys = { - // "dailyUserFees": options.createBalances(), - // "dailyProtocolRevenue": options.createBalances(), - // "dailySupplySideRevenue": options.createBalances(), - // "dailyHoldersRevenue": options.createBalances(), - // "dailyRevenue": options.createBalances(), - // "dailyFees": options.createBalances(), - // }; - // for (const key of Object.keys(keys)) { - // if (typeof response[key] === 'string') { - // keys[key].add(ETH_ADDRESS, Number(response[key]) * 1e18); - // } - // } - // return response as FetchResultGeneric - // }, - // start: 1541203200, - // meta: { - // methodology - // }, - // }, - // }, - // v2: { - // [CHAIN.ETHEREUM]: { - // fetch: async (options) => { - // const response = await v2Graph(options.chain)(options); - // response.totalVolume = - // Number(response.dailyVolume) + 1079453198606.2229; - // response.totalFees = Number(response.totalVolume) * 0.003; - // response.totalUserFees = Number(response.totalVolume) * 0.003; - // response.totalSupplySideRevenue = Number(response.totalVolume) * 0.003; - // return { - // ...response, - // } - // }, - // start: getStartTimestamp({ - // endpoints: v2Endpoints, - // chain: CHAIN.ETHEREUM, - // }), - // meta: { - // methodology - // }, - // }, - // ...Object.keys(chainv2mapping).reduce((acc, chain) => { - // acc[chain] = { - // fetch: fetchV2, - // start: 0, - // } - // return acc - // }, {}) - // }, + v1: { + [CHAIN.ETHEREUM]: { + fetch: async (options) => { + const response = await v1Graph(options.chain)(options); + const keys = { + "dailyUserFees": options.createBalances(), + "dailyProtocolRevenue": options.createBalances(), + "dailySupplySideRevenue": options.createBalances(), + "dailyHoldersRevenue": options.createBalances(), + "dailyRevenue": options.createBalances(), + "dailyFees": options.createBalances(), + }; + for (const key of Object.keys(keys)) { + if (typeof response[key] === 'string') { + keys[key].add(ETH_ADDRESS, Number(response[key]) * 1e18); + } + } + return response as FetchResultGeneric + }, + start: 1541203200, + meta: { + methodology + }, + }, + }, + v2: { + [CHAIN.ETHEREUM]: { + fetch: async (options) => { + const response = await v2Graph(options.chain)(options); + response.totalVolume = + Number(response.dailyVolume) + 1079453198606.2229; + response.totalFees = Number(response.totalVolume) * 0.003; + response.totalUserFees = Number(response.totalVolume) * 0.003; + response.totalSupplySideRevenue = Number(response.totalVolume) * 0.003; + return { + ...response, + } + }, + start: getStartTimestamp({ + endpoints: v2Endpoints, + chain: CHAIN.ETHEREUM, + }), + meta: { + methodology + }, + }, + ...Object.keys(chainv2mapping).reduce((acc, chain) => { + acc[chain] = { + fetch: fetchV2, + start: 0, + } + return acc + }, {}) + }, v3: Object.keys(v3Endpoints).reduce((acc, chain) => { acc[chain] = { fetch: v3Graphs(chain as Chain), @@ -329,6 +329,7 @@ const fetchSei = async (options: FetchOptions) => { } const mappingChain = (chain: string) => { if (chain === CHAIN.ERA) return "zksync" + if (chain === CHAIN.ROOTSTOCK) return "rootstock" return chain } @@ -363,5 +364,60 @@ adapter.breakdown.v3[CHAIN.SCROLL] = { } } +adapter.breakdown.v3[CHAIN.ROOTSTOCK] = { + fetch: fetchSei, + start: 0, + meta: { + methodology + } +} + +adapter.breakdown.v3[CHAIN.FILECOIN] = { + fetch: fetchSei, + start: 0, + meta: { + methodology + } +} + +adapter.breakdown.v3[CHAIN.BOBA] = { + fetch: fetchSei, + start: 0, + meta: { + methodology + } +} + +adapter.breakdown.v3[CHAIN.MOONBEAM] = { + fetch: fetchSei, + start: 0, + meta: { + methodology + } +} + +adapter.breakdown.v3[CHAIN.MANTA] = { + fetch: fetchSei, + start: 0, + meta: { + methodology + } +} + +adapter.breakdown.v3[CHAIN.MANTLE] = { + fetch: fetchSei, + start: 0, + meta: { + methodology + } +} + +adapter.breakdown.v3[CHAIN.LINEA] = { + fetch: fetchSei, + start: 0, + meta: { + methodology + } +} export default adapter; From 139d9ebb316f525925f6aaf44bd4f67d2758c5a5 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 11 Jul 2024 17:14:46 +0000 Subject: [PATCH 021/105] add betmode --- fees/betmode.ts | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 fees/betmode.ts diff --git a/fees/betmode.ts b/fees/betmode.ts new file mode 100644 index 0000000000..2fed4e2d79 --- /dev/null +++ b/fees/betmode.ts @@ -0,0 +1,24 @@ +import { FetchOptions, SimpleAdapter } from "../adapters/types"; +import { CHAIN } from "../helpers/chains"; + +const address = '0x79b4be7eD13Eef58Bd15ABd6ed79569f21D6c3AF' +const fetch = async (options: FetchOptions) => { + const dailyFees = options.createBalances(); + const feesStart = await options.fromApi.call({target: address, abi: "uint:totalWagered"}) + const feesEnd = await options.toApi.call({target: address, abi: "uint:totalWagered"}) + dailyFees.add("0xDfc7C877a950e49D2610114102175A06C2e3167a", feesEnd-feesStart) + dailyFees.resizeBy(1/100) + return {dailyFees} +} + +const adapter: SimpleAdapter = { + version: 2, + adapter: { + [CHAIN.MODE]: { + fetch: fetch, + start: 0, + } + } +} + +export default adapter; From df2b64d706cd0501eb4c4a6db522fa9ac0267ff0 Mon Sep 17 00:00:00 2001 From: "DESKTOP-6573H1H\\Jones" <936110878@qq.om> Date: Fri, 12 Jul 2024 16:00:47 +0800 Subject: [PATCH 022/105] glyph exchange v4 volumn&fees --- dexs/glyph-exchange-v4/index.ts | 71 +++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 dexs/glyph-exchange-v4/index.ts diff --git a/dexs/glyph-exchange-v4/index.ts b/dexs/glyph-exchange-v4/index.ts new file mode 100644 index 0000000000..017992e975 --- /dev/null +++ b/dexs/glyph-exchange-v4/index.ts @@ -0,0 +1,71 @@ +import { BreakdownAdapter } from "../../adapters/types"; +import { Chain } from "@defillama/sdk/build/general"; +import { CHAIN } from "../../helpers/chains"; +import { getGraphDimensions } from "../../helpers/getUniSubgraph"; + +const endpointsClassic = { + [CHAIN.CORE]: "https://thegraph.coredao.org/subgraphs/name/glyph/algebra" +}; + +const VOLUME_FIELD = "totalVolumeUSD"; +const DEFAULT_DAILY_VOLUME_FIELD = "volumeUSD"; +const FEES_FIELD = "totalFeesUSD"; +const DEFAULT_DAILY_FEES_FIELD = "feesUSD"; + +const graphsClassic = getGraphDimensions({ + graphUrls: endpointsClassic, + totalVolume: { + factory: "factories", + field: VOLUME_FIELD, + }, + dailyVolume: { + factory: "algebraDayData", + field: DEFAULT_DAILY_VOLUME_FIELD, + }, + totalFees: { + factory: "factories", + field: FEES_FIELD, + }, + dailyFees: { + factory: "algebraDayData", + field: DEFAULT_DAILY_FEES_FIELD, + }, + //dynamic fee + feesPercent: { + type: "fees", + Fees: 100, + UserFees: 100, + Revenue: 15, + ProtocolRevenue: 15, + SupplySideRevenue: 85 + } +}); + +const classic = Object.keys(endpointsClassic).reduce( + (acc, chain) => ({ + ...acc, + [chain]: { + fetch: graphsClassic(chain as Chain), + start: 1710806400, + meta: { + methodology: { + Fees: "GlyphExchange-v4 charges a dynamic fee", + UserFees: "GlyphExchange-v4 charges a dynamic fee", + Revenue: "15% fees goes to treasury", + ProtocolRevenue: "Treasury receives a share of the fees", + SupplySideRevenue: "85% fees goes to liquidity providers" + } + } + }, + }), + {} +) as any; + +const adapter: BreakdownAdapter = { + version: 2, + breakdown: { + classic: classic, + } +} + +export default adapter From 748ee0d439cf7277bd16b9787cb610681d2fbb09 Mon Sep 17 00:00:00 2001 From: bergben Date: Fri, 12 Jul 2024 21:50:27 +0200 Subject: [PATCH 023/105] fix(fluid): add chain param to calls --- fees/fluid/index.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/fees/fluid/index.ts b/fees/fluid/index.ts index 605a175326..1c681d31b9 100644 --- a/fees/fluid/index.ts +++ b/fees/fluid/index.ts @@ -323,6 +323,7 @@ const getFeesFromTo = async ( const { borrowToken: vaultBorrowToken } = await toApi.call({ target: vault, abi: abis.vault.constantsView, + chain: toApi.chain, }); borrowToken = vaultBorrowToken; } @@ -460,12 +461,14 @@ const getLiquidityUncollectedRevenueAt = async ( liquidityTokenBalance = ( await sdk.api.eth.getBalance({ target: config.liquidity, + chain: timestampedApi.chain, block: await timestampedApi.getBlock(), }) ).output; } else { liquidityTokenBalance = await timestampedApi.call({ target: token, + chain: timestampedApi.chain, abi: "erc20:balanceOf", params: [config.liquidity], }); @@ -579,6 +582,7 @@ const getVaultMagnifierCollectedRevenueFromTo = async ( const { supplyToken, borrowToken } = await api.call({ target: vault, abi: abis.vault.constantsView, + chain: api.chain, }); for await (const log of rebalanceEventLogs) { @@ -648,3 +652,4 @@ const getVaultMagnifierUncollectedRevenueAt = async ( return balancesApi; }; +// yarn test fees fluid From 26a7be1196d94a57dd3936db36247004c1257189 Mon Sep 17 00:00:00 2001 From: Michael Otis Date: Sat, 13 Jul 2024 15:42:25 -0500 Subject: [PATCH 024/105] Update Vela Subgraph URI's --- dexs/vela/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dexs/vela/index.ts b/dexs/vela/index.ts index 158818fc72..79eebf2c6d 100644 --- a/dexs/vela/index.ts +++ b/dexs/vela/index.ts @@ -8,9 +8,9 @@ import { getTimestampAtStartOfDayUTC } from "../../utils/date"; const endpoints = { [CHAIN.ARBITRUM]: - sdk.graph.modifyEndpoint('6H9PEiNPZgwXfpbijjesZh96LFBzUvkHmEutMoYQ9fvp'), + sdk.graph.modifyEndpoint('https://api.goldsky.com/api/public/project_clu01p4nr68r301pze2tj4sh7/subgraphs/vela-arbitrum/mainnet/gn'), [CHAIN.BASE]: - sdk.graph.modifyEndpoint('2qsbZ4X5TJM7NupC2eRJv167kBDFCDBd37KnK7PQtdga') + sdk.graph.modifyEndpoint('https://api.goldsky.com/api/public/project_clu01p4nr68r301pze2tj4sh7/subgraphs/vela-base/mainnet/gn') }; const graphs = (graphUrls: ChainEndpoints) => { From f54e257a35bd1f5194faa9b5404d77c1a0bae534 Mon Sep 17 00:00:00 2001 From: Michael Otis Date: Sat, 13 Jul 2024 15:50:13 -0500 Subject: [PATCH 025/105] Add base to fees adapter and update graph uris --- fees/vela/index.ts | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/fees/vela/index.ts b/fees/vela/index.ts index 9a45bd692b..3c6a0497c2 100644 --- a/fees/vela/index.ts +++ b/fees/vela/index.ts @@ -1,14 +1,16 @@ import * as sdk from "@defillama/sdk"; import { Adapter } from "../../adapters/types"; -import { ARBITRUM, AVAX } from "../../helpers/chains"; +import { CHAIN } from "../../helpers/chains"; import { request, gql } from "graphql-request"; import type { ChainEndpoints } from "../../adapters/types"; import { Chain } from "@defillama/sdk/build/general"; import { getTimestampAtStartOfDayUTC } from "../../utils/date"; const endpoints = { - [ARBITRUM]: - sdk.graph.modifyEndpoint('6H9PEiNPZgwXfpbijjesZh96LFBzUvkHmEutMoYQ9fvp'), + [CHAIN.ARBITRUM]: + sdk.graph.modifyEndpoint('https://api.goldsky.com/api/public/project_clu01p4nr68r301pze2tj4sh7/subgraphs/vela-arbitrum/mainnet/gn'), + [CHAIN.BASE]: + sdk.graph.modifyEndpoint('https://api.goldsky.com/api/public/project_clu01p4nr68r301pze2tj4sh7/subgraphs/vela-base/mainnet/gn') }; const methodology = { @@ -39,13 +41,20 @@ const graphs = (graphUrls: ChainEndpoints) => { const adapter: Adapter = { version: 1, adapter: { - [ARBITRUM]: { - fetch: graphs(endpoints)(ARBITRUM), + [CHAIN.ARBITRUM]: { + fetch: graphs(endpoints)(CHAIN.ARBITRUM), start: 1687806000, meta: { methodology, }, }, + [CHAIN.BASE]: { + fetch: graphs(endpoints)(CHAIN.BASE), + start: 1693785600, + meta: { + methodology, + }, + } }, }; From 2649861e392f0b69bd8a0dce34da69f5b22ade8f Mon Sep 17 00:00:00 2001 From: stabble-devops Date: Mon, 15 Jul 2024 03:21:55 -0400 Subject: [PATCH 026/105] Update daily volume API end point for stabble --- dexs/stabble/index.ts | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/dexs/stabble/index.ts b/dexs/stabble/index.ts index 4470eacce5..81d8e22071 100644 --- a/dexs/stabble/index.ts +++ b/dexs/stabble/index.ts @@ -1,15 +1,8 @@ import { CHAIN } from '../../helpers/chains'; import { httpGet } from '../../utils/fetchURL'; -const POOLS_API_ENDPOINT = 'https://pools-spn5wgvtfq-uc.a.run.app/'; - -async function fetch(timestamp: number) { - const pools = await httpGet(POOLS_API_ENDPOINT); - const vol24h = pools.reduce((sum: number, pool: any) => sum + (pool?.stats?.volume_24h || 0), 0); - return { - dailyVolume: vol24h, - timestamp: timestamp - } +async function fetch() { + return httpGet('https://api.stabble.org/stats/volume?type=daily'); } export default { From 03752d206c76679690f40f822edcbff8ef685a13 Mon Sep 17 00:00:00 2001 From: stabble-devops Date: Mon, 15 Jul 2024 03:26:50 -0400 Subject: [PATCH 027/105] bugfix: fetch function --- dexs/stabble/index.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/dexs/stabble/index.ts b/dexs/stabble/index.ts index 81d8e22071..b079393dc1 100644 --- a/dexs/stabble/index.ts +++ b/dexs/stabble/index.ts @@ -1,8 +1,12 @@ import { CHAIN } from '../../helpers/chains'; import { httpGet } from '../../utils/fetchURL'; -async function fetch() { - return httpGet('https://api.stabble.org/stats/volume?type=daily'); +async function fetch(timestamp: number) { + const dailyVolume = await httpGet('https://api.stabble.org/stats/volume?type=daily'); + return { + dailyVolume: dailyVolume, + timestamp: timestamp + } } export default { From 66d46606344707e1406ae603098a54691b895bba Mon Sep 17 00:00:00 2001 From: Tiago Silva Date: Mon, 15 Jul 2024 12:38:54 +0100 Subject: [PATCH 028/105] Change startTimestamp from startOfDay to fromTimestamp --- dexs/carbondefi/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexs/carbondefi/index.ts b/dexs/carbondefi/index.ts index 398ab895c3..42a51e0272 100644 --- a/dexs/carbondefi/index.ts +++ b/dexs/carbondefi/index.ts @@ -41,7 +41,7 @@ const chainInfo: { [key: string]: any } = { const getData = async (options: FetchOptions) => { const analyticsEndpoint = chainInfo[options.chain].endpoint; const getDimensionsByToken = chainInfo[options.chain].getDimensionsByToken; - const startTimestamp = options.startOfDay; + const startTimestamp = options.fromTimestamp; const endTimestamp = options.toTimestamp; try { From 8d3a5e8b7b1d0b5aef9f865a4209f2c052fd0a8a Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Mon, 15 Jul 2024 14:51:54 +0000 Subject: [PATCH 029/105] fix adapter --- aggregator-derivatives/bitoro/index.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/aggregator-derivatives/bitoro/index.ts b/aggregator-derivatives/bitoro/index.ts index eb2e5c0f5a..1809e5f088 100644 --- a/aggregator-derivatives/bitoro/index.ts +++ b/aggregator-derivatives/bitoro/index.ts @@ -16,9 +16,9 @@ const getBitoroProUrl = (startTime: number, endTime: number): string => { } const fetchBitoroX = async (options: any): Promise => { - const { fromTimestamp, toTimestamp } = options; - const dailyVolume = await fetchURL(getBitoroXUrl(fromTimestamp, toTimestamp)); - const totalVolume = await fetchURL(getBitoroXUrl(startTimestamp_bitoro_x, toTimestamp)); + const { startTimestamp, endTimestamp } = options; + const dailyVolume = await fetchURL(getBitoroXUrl(startTimestamp, endTimestamp)); + const totalVolume = await fetchURL(getBitoroXUrl(startTimestamp_bitoro_x, endTimestamp)); return { dailyVolume: dailyVolume.volume || 0, From 67757b94b8b261e130106905a609e194c4fdd0d2 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Mon, 15 Jul 2024 15:09:20 +0000 Subject: [PATCH 030/105] fix adapyer --- aggregator-derivatives/bitoro/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aggregator-derivatives/bitoro/index.ts b/aggregator-derivatives/bitoro/index.ts index 1809e5f088..01401e55b5 100644 --- a/aggregator-derivatives/bitoro/index.ts +++ b/aggregator-derivatives/bitoro/index.ts @@ -16,7 +16,7 @@ const getBitoroProUrl = (startTime: number, endTime: number): string => { } const fetchBitoroX = async (options: any): Promise => { - const { startTimestamp, endTimestamp } = options; + const { endTimestamp, startTimestamp } = options; const dailyVolume = await fetchURL(getBitoroXUrl(startTimestamp, endTimestamp)); const totalVolume = await fetchURL(getBitoroXUrl(startTimestamp_bitoro_x, endTimestamp)); From 5b67604f10b8bde6728f2f18c06b00958ef5365b Mon Sep 17 00:00:00 2001 From: Tiago Silva Date: Mon, 15 Jul 2024 16:25:09 +0100 Subject: [PATCH 031/105] Check tokens are native when adding dimension sums by token --- dexs/carbondefi/utils.ts | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/dexs/carbondefi/utils.ts b/dexs/carbondefi/utils.ts index f5c3bf2b55..9b31a83ca3 100644 --- a/dexs/carbondefi/utils.ts +++ b/dexs/carbondefi/utils.ts @@ -55,6 +55,9 @@ export const getDimensionsSum = ( }; }; +const isNativeToken = (address: string) => + address === "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE"; + export const getDimensionsSumByToken = ( swapData: CarbonAnalyticsResponse, startTimestamp: number, @@ -70,13 +73,29 @@ export const getDimensionsSumByToken = ( const { dailyVolume, dailyFees, totalFees, totalVolume } = emptyData; swapData.forEach((swap) => { - totalVolume.add(swap.targetaddress, swap.targetamount_real); - totalFees.add(swap.feeaddress, swap.tradingfeeamount_real); + if (isNativeToken(swap.targetaddress)) { + totalVolume.addGasToken(swap.targetamount_real); + } else { + totalVolume.add(swap.targetaddress, swap.targetamount_real); + } + if (isNativeToken(swap.feeaddress)) { + totalFees.addGasToken(swap.tradingfeeamount_real); + } else { + totalFees.add(swap.feeaddress, swap.tradingfeeamount_real); + } }); dailyData.forEach((swap) => { - dailyVolume.add(swap.targetaddress, swap.targetamount_real); - dailyFees.add(swap.feeaddress, swap.tradingfeeamount_real); + if (isNativeToken(swap.targetaddress)) { + dailyVolume.addGasToken(swap.targetamount_real); + } else { + dailyVolume.add(swap.targetaddress, swap.targetamount_real); + } + if (isNativeToken(swap.feeaddress)) { + dailyFees.addGasToken(swap.tradingfeeamount_real); + } else { + dailyFees.add(swap.feeaddress, swap.tradingfeeamount_real); + } }); return { From a4ce90e6efaf447ef21d6e5912fae914f6514594 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Mon, 15 Jul 2024 16:38:40 +0000 Subject: [PATCH 032/105] fix native token --- dexs/carbondefi/utils.ts | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/dexs/carbondefi/utils.ts b/dexs/carbondefi/utils.ts index 9b31a83ca3..7140a3cff6 100644 --- a/dexs/carbondefi/utils.ts +++ b/dexs/carbondefi/utils.ts @@ -55,8 +55,7 @@ export const getDimensionsSum = ( }; }; -const isNativeToken = (address: string) => - address === "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE"; +const isNativeToken = (address: string) => address.toLowerCase() === "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE".toLowerCase(); export const getDimensionsSumByToken = ( swapData: CarbonAnalyticsResponse, @@ -67,19 +66,19 @@ export const getDimensionsSumByToken = ( dailyFees: Balances; totalVolume: Balances; totalFees: Balances; - } + }, ) => { const dailyData = filterDataByDate(swapData, startTimestamp, endTimestamp); const { dailyVolume, dailyFees, totalFees, totalVolume } = emptyData; swapData.forEach((swap) => { if (isNativeToken(swap.targetaddress)) { - totalVolume.addGasToken(swap.targetamount_real); + totalVolume.addGasToken(swap.targetamount_real * 1e18); } else { totalVolume.add(swap.targetaddress, swap.targetamount_real); } if (isNativeToken(swap.feeaddress)) { - totalFees.addGasToken(swap.tradingfeeamount_real); + totalFees.addGasToken(swap.tradingfeeamount_real * 1e18); } else { totalFees.add(swap.feeaddress, swap.tradingfeeamount_real); } @@ -87,12 +86,12 @@ export const getDimensionsSumByToken = ( dailyData.forEach((swap) => { if (isNativeToken(swap.targetaddress)) { - dailyVolume.addGasToken(swap.targetamount_real); + dailyVolume.addGasToken(swap.targetamount_real * 1e18); } else { dailyVolume.add(swap.targetaddress, swap.targetamount_real); } if (isNativeToken(swap.feeaddress)) { - dailyFees.addGasToken(swap.tradingfeeamount_real); + dailyFees.addGasToken(swap.tradingfeeamount_real * 1e18); } else { dailyFees.add(swap.feeaddress, swap.tradingfeeamount_real); } From 83dd48413e53276acc782d8da82f20f02b91fd6a Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Mon, 15 Jul 2024 16:58:11 +0000 Subject: [PATCH 033/105] change token price --- fees/betmode.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fees/betmode.ts b/fees/betmode.ts index 2fed4e2d79..9eda49f321 100644 --- a/fees/betmode.ts +++ b/fees/betmode.ts @@ -1,7 +1,7 @@ import { FetchOptions, SimpleAdapter } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; -const address = '0x79b4be7eD13Eef58Bd15ABd6ed79569f21D6c3AF' +const address = '0xdfc7c877a950e49d2610114102175a06c2e3167a' const fetch = async (options: FetchOptions) => { const dailyFees = options.createBalances(); const feesStart = await options.fromApi.call({target: address, abi: "uint:totalWagered"}) From cc919914c1423a90e8291b6efef6a2d826732466 Mon Sep 17 00:00:00 2001 From: nicetomeetyou1 Date: Tue, 16 Jul 2024 14:26:25 +0700 Subject: [PATCH 034/105] feat: add scallop fee --- fees/scallop/index.ts | 68 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 fees/scallop/index.ts diff --git a/fees/scallop/index.ts b/fees/scallop/index.ts new file mode 100644 index 0000000000..19e0ecb62f --- /dev/null +++ b/fees/scallop/index.ts @@ -0,0 +1,68 @@ +import { + Adapter, + FetchResultFees, + FetchV2, +} from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import fetchURL from "../../utils/fetchURL"; + +const scallopApiURL = 'https://sui.apis.scallop.io/statistic/daily-fees'; + +interface DailyStats { + borrowingInterestFee: number, + liquidationFee: number, + borrowingFee: number, + flashloanFee: number, + liquidityProviderInterest: number, + dateHistory: string; +} + +const methodology = { + Fees: 'Interest and fees paid by borrowers and the liquidated', + UserFees: 'Interest and fees paid by borrowers and the liquidated', + ProtocolRevenue: 'The portion of the total fees going to the Scallop treasury', + SupplySideRevenue: '80% of all collected borrowing interest fees go to liquidity providers.' +} + +const fetchScallopStats: FetchV2 = async ({ fromTimestamp, toTimestamp }): Promise => { + const url = `${scallopApiURL}?fromTimestamp=${fromTimestamp}&toTimestamp=${toTimestamp}` + const stats: DailyStats = await fetchURL(url); + + const dailyFees = stats.borrowingInterestFee + + stats.liquidationFee + + stats.borrowingFee + + stats.flashloanFee + + stats.liquidityProviderInterest; + + const dailyRevenue = stats.liquidationFee + + stats.borrowingFee + + stats.flashloanFee + + stats.borrowingInterestFee; + + return { + timestamp: toTimestamp, + dailyFees: dailyFees.toString(), + dailyUserFees: dailyFees.toString(), + dailyRevenue: dailyRevenue.toString(), + dailyProtocolRevenue: dailyRevenue.toString(), + dailySupplySideRevenue: stats.liquidityProviderInterest.toString(), + }; +}; + + +const adapter: Adapter = { + version: 2, + adapter: { + [CHAIN.SUI]: { + runAtCurrTime: false, + customBackfill: undefined, + fetch: fetchScallopStats, + start: 1703980799, + meta: { + methodology, + }, + }, + }, +}; + +export default adapter; From 0ebc6c8d575c4bf277ffb98dd63abcb9372939e8 Mon Sep 17 00:00:00 2001 From: ethzoomer Date: Tue, 16 Jul 2024 17:02:50 +0100 Subject: [PATCH 035/105] fix: Aero/Velo dexs events pagination --- dexs/aerodrome-slipstream/index.ts | 36 ++++++++++++++++++------- dexs/velodrome-slipstream/index.ts | 43 +++++++++++++++++++++--------- 2 files changed, 57 insertions(+), 22 deletions(-) diff --git a/dexs/aerodrome-slipstream/index.ts b/dexs/aerodrome-slipstream/index.ts index 3e69a75809..5708c90830 100644 --- a/dexs/aerodrome-slipstream/index.ts +++ b/dexs/aerodrome-slipstream/index.ts @@ -30,32 +30,50 @@ const fetch = async (timestamp: number, _: any, { api, getLogs, createBalances, let unfinished = true; while (unfinished) { - const forSwaps: IForSwap[] = (await api.call({ + const forSwapsUnfiltered: IForSwap[] = (await api.call({ target: gurar, params: [chunkSize, currentOffset], abi: abis.forSwaps, chain: CHAIN.BASE, - })).filter(t => Number(t.type) > 0).map((e: any) => { + })); + + const forSwaps: IForSwap[] = forSwapsUnfiltered.filter(t => Number(t.type) > 0).map((e: any) => { return { lp: e.lp, token0: e.token0, token1: e.token1, pool_fee: e.pool_fee, } - }) + }); - unfinished = forSwaps.length !== 0; + unfinished = forSwapsUnfiltered.length !== 0; currentOffset += chunkSize; allForSwaps.push(...forSwaps); } const targets = allForSwaps.map((forSwap: IForSwap) => forSwap.lp) - const logs: ILog[][] = await getLogs({ - targets, - eventAbi: event_swap, - flatten: false, - }) + let logs: ILog[][] = []; + const targetChunkSize = 5; + let currentTargetOffset = 0; + unfinished = true; + + while (unfinished) { + let endOffset = currentTargetOffset + targetChunkSize; + if (endOffset >= targets.length) { + unfinished = false; + endOffset = targets.length; + } + + let currentLogs: ILog[][] = await getLogs({ + targets: targets.slice(currentTargetOffset, endOffset), + eventAbi: event_swap, + flatten: false, + }) + + logs.push(...currentLogs); + currentTargetOffset += targetChunkSize; + } logs.forEach((logs: ILog[], idx: number) => { const { token1, pool_fee } = allForSwaps[idx] diff --git a/dexs/velodrome-slipstream/index.ts b/dexs/velodrome-slipstream/index.ts index d5ebee94bf..ad5671e241 100644 --- a/dexs/velodrome-slipstream/index.ts +++ b/dexs/velodrome-slipstream/index.ts @@ -26,7 +26,7 @@ const fetch = async (options: FetchOptions): Promise => { const dailyVolume = options.createBalances() const dailyFees = options.createBalances() let chunkSize = 400; - let currentOffset = 630; // Slipstream launched after ~650 v2 pools were already created + let currentOffset = 0; const allForSwaps: IForSwap[] = []; let unfinished = true; let sugarContract = sugar; @@ -34,37 +34,54 @@ const fetch = async (options: FetchOptions): Promise => { // before the new Sugar is deployed, we must use the old Sugar contract, and make one large Sugar call if (options.startOfDay < 1715160600) { chunkSize = 1800; - currentOffset = 0; sugarContract = sugarOld; } while (unfinished) { - const forSwaps: IForSwap[] = (await options.api.call({ + const forSwapsUnfiltered: IForSwap[] = (await options.api.call({ target: sugarContract, - params: [chunkSize, currentOffset], // Slipstream launched after ~650 v2 pools were already created + params: [chunkSize, currentOffset], abi: abis.forSwaps, chain: CHAIN.OPTIMISM, - })).filter(t => Number(t.type) > 0).map((e: any) => { + })); + + const forSwaps: IForSwap[] = forSwapsUnfiltered.filter(t => Number(t.type) > 0).map((e: any) => { return { lp: e.lp, token0: e.token0, token1: e.token1, pool_fee: e.pool_fee, } - }) + }); - unfinished = forSwaps.length !== 0; + unfinished = forSwapsUnfiltered.length !== 0; currentOffset += chunkSize; allForSwaps.push(...forSwaps); } - const targets: string[] = [...new Set(allForSwaps.map((forSwap: IForSwap) => forSwap.lp))] + const targets = allForSwaps.map((forSwap: IForSwap) => forSwap.lp) - const logs: ILog[][] = await options.getLogs({ - targets, - eventAbi: event_swap, - flatten: false, - }) + let logs: ILog[][] = []; + const targetChunkSize = 5; + let currentTargetOffset = 0; + unfinished = true; + + while (unfinished) { + let endOffset = currentTargetOffset + targetChunkSize; + if (endOffset >= targets.length) { + unfinished = false; + endOffset = targets.length; + } + + let currentLogs: ILog[][] = await options.getLogs({ + targets: targets.slice(currentTargetOffset, endOffset), + eventAbi: event_swap, + flatten: false, + }) + + logs.push(...currentLogs); + currentTargetOffset += targetChunkSize; + } logs.forEach((logs: ILog[], idx: number) => { const { token1, pool_fee } = allForSwaps[idx] From 563e6216c3f18bb1399fd6b19c6fe6fdfc02ae4e Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 16 Jul 2024 16:23:07 +0000 Subject: [PATCH 036/105] fix timestamp --- fees/scallop/index.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/fees/scallop/index.ts b/fees/scallop/index.ts index 19e0ecb62f..69ffb3b17a 100644 --- a/fees/scallop/index.ts +++ b/fees/scallop/index.ts @@ -1,6 +1,7 @@ import { Adapter, FetchResultFees, + FetchResultV2, FetchV2, } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; @@ -24,8 +25,8 @@ const methodology = { SupplySideRevenue: '80% of all collected borrowing interest fees go to liquidity providers.' } -const fetchScallopStats: FetchV2 = async ({ fromTimestamp, toTimestamp }): Promise => { - const url = `${scallopApiURL}?fromTimestamp=${fromTimestamp}&toTimestamp=${toTimestamp}` +const fetchScallopStats: FetchV2 = async ({ startTimestamp, endTimestamp }): Promise => { + const url = `${scallopApiURL}?fromTimestamp=${startTimestamp}&toTimestamp=${endTimestamp}` const stats: DailyStats = await fetchURL(url); const dailyFees = stats.borrowingInterestFee + @@ -40,7 +41,6 @@ const fetchScallopStats: FetchV2 = async ({ fromTimestamp, toTimestamp }): Promi stats.borrowingInterestFee; return { - timestamp: toTimestamp, dailyFees: dailyFees.toString(), dailyUserFees: dailyFees.toString(), dailyRevenue: dailyRevenue.toString(), From ef20ca63d7fc9d709c6597bacae2b5d59a52286f Mon Sep 17 00:00:00 2001 From: K-Lascar <36436810+K-Lascar@users.noreply.github.com> Date: Wed, 17 Jul 2024 22:53:38 +1000 Subject: [PATCH 037/105] Update Volume Tracking Since the launch of V2.1 Contracts, contract events needs to track the fees collected event to receive the volume for GMX. --- dexs/gmx-v2/gmx-v2-trade/index.ts | 37 +++++++------------------------ 1 file changed, 8 insertions(+), 29 deletions(-) diff --git a/dexs/gmx-v2/gmx-v2-trade/index.ts b/dexs/gmx-v2/gmx-v2-trade/index.ts index b74ee4da48..2d3c0d96ef 100644 --- a/dexs/gmx-v2/gmx-v2-trade/index.ts +++ b/dexs/gmx-v2/gmx-v2-trade/index.ts @@ -8,14 +8,8 @@ interface ILog { topics: string[]; } -const topic0_ins = '0x137a44067c8961cd7e1d876f4754a5a3a75989b4552f1843fc69c3b372def160'; -const topic1_ins = '0xf94196ccb31f81a3e67df18f2a62cbfb50009c80a7d3c728a3f542e3abc5cb63'; - -const topic0_des = '0x137a44067c8961cd7e1d876f4754a5a3a75989b4552f1843fc69c3b372def160'; -const topic1_des = '0x07d51b51b408d7c62dcc47cc558da5ce6a6e0fd129a427ebce150f52b0e5171a'; - -const topic0_fees = '0x137a44067c8961cd7e1d876f4754a5a3a75989b4552f1843fc69c3b372def160'; -const topic1_fees = '0xe096982abd597114bdaa4a60612f87fabfcc7206aa12d61c50e7ba1e6c291100'; +const topic0_trades = '0x137a44067c8961cd7e1d876f4754a5a3a75989b4552f1843fc69c3b372def160'; +const topic1_trades = '0xe096982abd597114bdaa4a60612f87fabfcc7206aa12d61c50e7ba1e6c291100'; type TChain = { [s: Chain | string]: string; @@ -27,34 +21,19 @@ const contract: TChain = { } const fetch = async (options: FetchOptions): Promise => { - const posistion_logs = await options.getLogs({ - target: contract[options.chain], - topics: [topic0_ins, topic1_ins] - }); - - const decress_logs = await options.getLogs({ + const trade_logs = await options.getLogs({ target: contract[options.chain], - topics: [topic0_des, topic1_des] + topics: [topic0_trades, topic1_trades] }); - + let hash: string[] = []; - const raw_des = decress_logs.map((e: ILog) => { - const data = e.data.replace('0x', ''); - const volume = data.slice(102 * 64, (102 * 64) + 64); - const key = Number('0x' + data.slice(118 * 64, (118 * 64) + 64)); - if (key === 7) return 0; - hash.push(e.transactionHash); - // 156 - return Number('0x' + volume) / 1e30; - }) - - const raw_in = posistion_logs.filter(e => !hash.includes(e.transactionHash)).map((e: ILog) => { + const raw_trades = trade_logs.map((e: ILog) => { const data = e.data.replace('0x', ''); - const volume = data.slice(100 * 64, (100 * 64) + 64); + const volume = data.slice(81 * 64, (81 * 64) + 64); return Number('0x' + volume) / 1e30; }) - const dailyVolume: number = [...raw_des, ...raw_in] + const dailyVolume: number = [...raw_trades] .reduce((a: number, b: number) => a + b, 0); return { From 2517fc6c61eb96aa06ed25e8ae6acaca7326ce71 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 17 Jul 2024 13:59:52 +0000 Subject: [PATCH 038/105] wrong hdr --- dexs/raydium/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexs/raydium/index.ts b/dexs/raydium/index.ts index 5c422b5c70..1ec4f36891 100644 --- a/dexs/raydium/index.ts +++ b/dexs/raydium/index.ts @@ -56,7 +56,7 @@ const graphs = async (timestamp: number): Promise Date: Wed, 17 Jul 2024 15:23:37 +0000 Subject: [PATCH 039/105] fix apollox --- dexs/apollox/index.ts | 10 +++++++--- fees/apollox/index.ts | 5 +++-- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/dexs/apollox/index.ts b/dexs/apollox/index.ts index 558c6c8e06..51fe310ad3 100644 --- a/dexs/apollox/index.ts +++ b/dexs/apollox/index.ts @@ -54,7 +54,7 @@ type TotalVolumeItem = { }, "cumVol": number } - + const TotalVolumeV1AndV2ForBscAPI = "https://fapi.apollox.finance/fapi/v1/openInterestAndTrader" const TotalVolumeAPI = "https://www.apollox.finance/bapi/futures/v1/public/future/apx/fee/all" @@ -64,9 +64,13 @@ const v2VolumeAPI = const v1VolumeAPI = "https://www.apollox.finance/fapi/v1/ticker/24hr"; const fetchV2Volume = async (chain: Chain) => { + const url = `${v2VolumeAPI}?chain=${chain}&excludeCake=true`; const { data = [] } = ( - await httpGet(v2VolumeAPI, { params: { chain, excludeCake: true } }) + await httpGet(url) ) as { data: ResponseItem[] } + if (!data) { + return 0; + } const dailyVolume = data.reduce((p, c) => p + +c.qutoVol, 0); return dailyVolume @@ -82,7 +86,7 @@ const fetchV1Volume = async () => { const fetchTotalVolumeV1AndV2ForBSC = async () => { const data = ( await httpGet(TotalVolumeV1AndV2ForBscAPI) - ) as TotalVolumeV1AndV2ForBscItem + ) as TotalVolumeV1AndV2ForBscItem return { v1: Number(data.v1TotalVolume), v2: Number(data.v2TotalVolume) } }; diff --git a/fees/apollox/index.ts b/fees/apollox/index.ts index cedd0e4e60..641078930b 100644 --- a/fees/apollox/index.ts +++ b/fees/apollox/index.ts @@ -8,7 +8,8 @@ const FeesAndRevenueURL = "https://www.apollox.finance/bapi/futures/v1/public/f const request = () => { return (chain: Chain) => { return async () => { - const { data } = await httpGet(FeesAndRevenueURL, { params: { chain } }) + const url = `${FeesAndRevenueURL}?chain=${chain}` + const { data } = await httpGet(url) const { alpFeeVOFor24Hour, allAlpFeeVO } = data return { dailyFees: alpFeeVOFor24Hour.fee || 0, @@ -26,7 +27,7 @@ const adapter: Adapter = { runAtCurrTime: true, fetch: request()(CHAIN.BSC), start: 1689609600, - }, + }, [CHAIN.ARBITRUM]: { runAtCurrTime: true, fetch: request()(CHAIN.ARBITRUM), From 60cf691716595792a2416cd50fc0d4048af08dba Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 17 Jul 2024 15:41:57 +0000 Subject: [PATCH 040/105] disable run current --- dexs/apollox/index.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/dexs/apollox/index.ts b/dexs/apollox/index.ts index 51fe310ad3..485a51b307 100644 --- a/dexs/apollox/index.ts +++ b/dexs/apollox/index.ts @@ -101,7 +101,7 @@ const fetchTotalV2Volume = async (chain: Chain) => { const adapter: SimpleAdapter = { adapter: { [CHAIN.BSC]: { - runAtCurrTime: true, + // runAtCurrTime: true, fetch: async (timestamp) => { const [v1, v2, totalV2Volume, { v1 : totalV1Volume }] = await Promise.all([ fetchV2Volume(CHAIN.BSC), @@ -118,7 +118,7 @@ const adapter: SimpleAdapter = { start: 1682035200, }, [CHAIN.ARBITRUM]: { - runAtCurrTime: true, + // runAtCurrTime: true, fetch: async (timestamp) => { const [v2, totalVolume] = await Promise.all([ fetchV2Volume(CHAIN.ARBITRUM), @@ -133,7 +133,7 @@ const adapter: SimpleAdapter = { start: 1682035200, }, [CHAIN.OP_BNB]: { - runAtCurrTime: true, + // runAtCurrTime: true, fetch: async (timestamp) => { const [v2, totalVolume] = await Promise.all([ fetchV2Volume('opbnb'), @@ -148,7 +148,7 @@ const adapter: SimpleAdapter = { start: 1682035200, }, [CHAIN.BASE]: { - runAtCurrTime: true, + // runAtCurrTime: true, fetch: async (timestamp) => { const [v2, totalVolume] = await Promise.all([ fetchV2Volume(CHAIN.BASE), From 1b2004c5f59da1ad30f59397e105120c8ce3d73f Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 17 Jul 2024 17:22:45 +0000 Subject: [PATCH 041/105] disable run current --- dexs/hyperliquid/index.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/dexs/hyperliquid/index.ts b/dexs/hyperliquid/index.ts index ae19b88d21..1a1cdd80ee 100644 --- a/dexs/hyperliquid/index.ts +++ b/dexs/hyperliquid/index.ts @@ -26,7 +26,6 @@ const adapter: SimpleAdapter = { "hyperliquid": { fetch, start: 1677283200, - runAtCurrTime: true, }, } }; From 366b9b3551d7b94c6928040a5744b690de098003 Mon Sep 17 00:00:00 2001 From: Antonio Guilherme Ferreira Viggiano Date: Wed, 17 Jul 2024 16:04:51 -0300 Subject: [PATCH 042/105] Add SizeCredit fees --- fees/size-credit.ts | 68 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 fees/size-credit.ts diff --git a/fees/size-credit.ts b/fees/size-credit.ts new file mode 100644 index 0000000000..1075b7104a --- /dev/null +++ b/fees/size-credit.ts @@ -0,0 +1,68 @@ +import ADDRESSES from '../helpers/coreAssets.json'; +import { Adapter, FetchOptions } from "../adapters/types"; +import { CHAIN } from "../helpers/chains"; + +const SZWETH_CONTRACT = '0x974583f05de1fd18c59c77c4a8803cf0c7db5333'; +const SZAUSDC_CONTRACT = '0x38978038a06a21602a4202dfa66968e7f525bf3e'; +const AUSDC_CONTRACT = '0x4e65fe4dba92790696d040ac24aa414708f5c0ab'; +const SIZE_PROXY_CONTRACT = '0xC2a429681CAd7C1ce36442fbf7A4a68B11eFF940'; + +const fetch: any = async ({ createBalances, getLogs, api, getFromBlock, getToBlock }: FetchOptions) => { + const fees = createBalances() + const [fromBlock, toBlock] = await Promise.all([getFromBlock(), getToBlock()]) + const FEE_MAPPING = [ + ADDRESSES.base.WETH, + AUSDC_CONTRACT + ] + const logsArray = await Promise.all([ + getLogs({ + target: SZWETH_CONTRACT, + eventAbi: "event Transfer(address indexed from, address indexed to, uint256 value)", + fromBlock, + toBlock + }), + getLogs({ + target: SZAUSDC_CONTRACT, + eventAbi: "event TransferUnscaled(address indexed from, address indexed to, uint256 value)", + fromBlock, + toBlock + }) + ]) + const feeConfig = await api.call({ + target: SIZE_PROXY_CONTRACT, + abi: "function feeConfig() view returns (uint256 swapFeeAPR, uint256 fragmentationFee, uint256 liquidationRewardPercent, uint256 overdueCollateralProtocolPercent, uint256 collateralProtocolPercent, address feeRecipient)", + params: [], + }); + const feeRecipient = feeConfig.feeRecipient; + logsArray.forEach((logs, i) => { + logs.forEach((log) => { + if (log.to === feeRecipient) { + fees.add(FEE_MAPPING[i], Number(log.value)); + } + }) + }) + + return { + dailyFees: fees, + dailyProtocolRevenue: fees + }; +}; + +const methodology = "Swap fees are applied on every cash-for-credit trade, and fragmentation fees are charged on every credit split" + +const adapter: Adapter = { + version: 2, + adapter: { + [CHAIN.BASE]: { + fetch, + start: 1721083903, + meta: { + methodology: { + Fees: methodology, + ProtocolRevenue: methodology + } + } + }, + } +} +export default adapter; \ No newline at end of file From e00465dd143f2f499d9c998e95ecc1aee39f0577 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 18 Jul 2024 14:58:51 +0000 Subject: [PATCH 043/105] fix openbook --- dexs/openbook/index.ts | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/dexs/openbook/index.ts b/dexs/openbook/index.ts index 869de687fd..32012c1083 100644 --- a/dexs/openbook/index.ts +++ b/dexs/openbook/index.ts @@ -1,18 +1,22 @@ import { SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; -import fetchURL from "../../utils/fetchURL"; +import fetchURL, { httpGet } from "../../utils/fetchURL"; interface IVolume { - volume_24h: number; + notionalVolume24hour: number; } const fetch = async (timestamp: number) => { const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)); - const url = `https://dry-ravine-67635.herokuapp.com/pairs`; - const historicalVolume: IVolume[] = (await fetchURL(url)); - const dailyVolume = historicalVolume.reduce((a: number, b: IVolume) => a + b.volume_24h, 0); + const url = `https://prod.arcana.markets/api/openbookv2/markets`; + const historicalVolume: IVolume[] = (await httpGet(url, { headers: { + "origin": "https://www.openbook.ag", + "Referer": "https://www.openbook.ag", + "user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36" } + })); + const dailyVolume = historicalVolume.reduce((a: number, b: IVolume) => a + b.notionalVolume24hour, 0); return { timestamp: dayTimestamp, From 7ff2fe42dec5297317bf0c5043e081d556bedbcd Mon Sep 17 00:00:00 2001 From: Arjun Rao <2940142+arjun-io@users.noreply.github.com> Date: Thu, 18 Jul 2024 12:12:43 -0400 Subject: [PATCH 044/105] Update Perennial volumes to pull from new subgraph --- dexs/perennial-v2/index.ts | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/dexs/perennial-v2/index.ts b/dexs/perennial-v2/index.ts index 290f0a2e23..0878884ec3 100644 --- a/dexs/perennial-v2/index.ts +++ b/dexs/perennial-v2/index.ts @@ -6,28 +6,21 @@ import { getEnv } from '../../helpers/env' const apiKey = getEnv('PERENNIAL_V2_SUBGRAPH_API_KEY') const graphUrls: { [key: string]: string } = { - [CHAIN.ARBITRUM]: `https://subgraph.satsuma-prod.com/${apiKey}/equilibria/perennial-v2-arbitrum/api`, + [CHAIN.ARBITRUM]: `https://subgraph.satsuma-prod.com/${apiKey}/equilibria/perennial-v2-arbitrum-new/api`, } const volumeDataQuery = gql` query PNLVolume($period: BigInt!, $periodEnd: BigInt!) { - daily: bucketedVolumes( - where: { - bucket: daily - periodStartTimestamp_gte: $period - periodStartTimestamp_lt: $periodEnd - } + daily: protocolAccumulations( + where: { bucket: daily, timestamp_gte: $period, timestamp_lt: $periodEnd } first: 1000 - orderBy: periodStartTimestamp + orderBy: timestamp orderDirection: desc ) { - market longNotional shortNotional } - - total: bucketedVolumes(where: { bucket: all }, first: 1000) { - market + total: protocolAccumulations(where: { bucket: all }) { longNotional shortNotional } From 4b8a616739f912eba0a249dd93fdaa343d30f7d1 Mon Sep 17 00:00:00 2001 From: dunglv Date: Mon, 15 Jul 2024 12:51:14 +0700 Subject: [PATCH 045/105] Listing D2Finance --- fees/d2finance/index.ts | 117 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 fees/d2finance/index.ts diff --git a/fees/d2finance/index.ts b/fees/d2finance/index.ts new file mode 100644 index 0000000000..b9061ecfe8 --- /dev/null +++ b/fees/d2finance/index.ts @@ -0,0 +1,117 @@ +import BigNumber from "bignumber.js"; +import { FetchV2 } from "../../adapters/types"; +import { ARBITRUM } from "../../helpers/chains"; +import { getPrices } from "../../utils/prices"; +import { gql, GraphQLClient } from "graphql-request"; +import { + getTimestampAtStartOfMonth, + getTimestampAtStartOfNextMonth, +} from "../../utils/date"; + +interface Token { + ticker: string; + geckoId: string; + decimals: number; +} + +interface DataItem { + blockTimestamp: number; + contract: string; + token: string; + amount: string; +} + +const tokens = [ + { + ticker: "ARB", + geckoId: "coingecko:arbitrum", + decimals: 18, + }, + { + ticker: "ETH", + geckoId: "coingecko:ethereum", + decimals: 18, + }, + { + ticker: "USDC", + geckoId: "coingecko:usd-coin", + decimals: 6, + }, +]; + +const fetchFeeData = async (timestamp: number) => { + const client = new GraphQLClient("https://d2.finance/subgraphs/name/d2"); + const req = gql` + query Query { + feesWithdrawns(where: { blockTimestamp_lte: ${timestamp} }) { + blockTimestamp + contract + token + amount + } + } + `; + const response = await client.request(req); + const feesWithdrawns: DataItem[] = response.feesWithdrawns; + return feesWithdrawns; +}; + +const fetchTokenPrices = async (timestamp: number) => { + const prices = await getPrices( + tokens.map((token: Token) => token.geckoId), + timestamp + ); + + return prices; +}; + +const fetch: FetchV2 = async ({ startTimestamp }) => { + const monthStartTimeStamp = getTimestampAtStartOfMonth(startTimestamp); + const monthEndTimestamp = getTimestampAtStartOfNextMonth(startTimestamp); + + const result = await fetchFeeData(startTimestamp); + const tokenPrices = await fetchTokenPrices(startTimestamp); + + let totalAmount = 0; + let monthlyAmount = 0; + for (let data of result) { + const token = tokens.find((token) => token.ticker === data.token); + if (token) { + const price = tokenPrices[token.geckoId].price; + const amountInDollar = Number( + BigNumber(data.amount) + .times(price) + .dividedBy(BigNumber(10).pow(token.decimals)) + ); + totalAmount += amountInDollar; + if ( + data.blockTimestamp >= monthStartTimeStamp && + data.blockTimestamp < monthEndTimestamp + ) { + monthlyAmount += amountInDollar; + } + } + } + + const monthFee = monthlyAmount / 30; + + return { + dailyFees: monthFee, + dailyRevenue: monthFee, + dailyProtocolRevenue: monthFee, + totalFees: totalAmount, + totalRevenue: totalAmount, + totalProtocolRevenue: totalAmount, + }; +}; + +export default { + version: 2, + adapter: { + [ARBITRUM]: { + fetch, + start: 1705715264, + runAtCurrTime: true, + }, + }, +}; From 0a43dae95912d9b94490927bfc71d8daeb1fb338 Mon Sep 17 00:00:00 2001 From: surf-rd Date: Fri, 19 Jul 2024 15:21:55 +0800 Subject: [PATCH 046/105] add dailyFees --- fees/surfone/index.ts | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/fees/surfone/index.ts b/fees/surfone/index.ts index 7c209bc4fe..1c2fb1a101 100644 --- a/fees/surfone/index.ts +++ b/fees/surfone/index.ts @@ -1,4 +1,4 @@ -import { SimpleAdapter } from "../../adapters/types"; +import {FetchOptions, SimpleAdapter} from "../../adapters/types"; import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; import { httpGet } from "../../utils/fetchURL"; @@ -10,27 +10,25 @@ const headers = { "user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36" }; -interface IVolume { - '24h_vol': number, +interface IFee { + daily_fee: number, total_fee: number, } const fetch = () => { return async (timestamp: number) => { const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)) - const response = (await httpGet(volumeEndpointV2, { headers })); + const response = (await httpGet(volumeEndpointV2, {headers})); - const volume: IVolume = response.data; - const dailyFees = Number(volume['24h_vol'] || 0) * (0.1/100); // 0.1% of trade volume + const fee: IFee = response.data; return { - dailyFees: `${dailyFees}`, - totalFees: `${volume?.total_fee || undefined}`, + dailyFees: `${fee?.daily_fee || undefined}`, + totalFees: `${fee?.total_fee || undefined}`, timestamp: dayTimestamp, }; }; } - const adapter: SimpleAdapter = { version: 1, adapter: { From 007f7dfc81b8b3fa3b9c07519dd1c176cb0be84e Mon Sep 17 00:00:00 2001 From: tuco-gordian Date: Fri, 19 Jul 2024 14:42:55 +0300 Subject: [PATCH 047/105] Dexfinance adapter --- aggregators/dexswap/index.ts | 61 ++++++++++++++++++++++++++++++++++++ dexs/dexswap/index.ts | 61 ++++++++++++++++++++++++++++++++++++ fees/dexswap/index.ts | 61 ++++++++++++++++++++++++++++++++++++ 3 files changed, 183 insertions(+) create mode 100644 aggregators/dexswap/index.ts create mode 100644 dexs/dexswap/index.ts create mode 100644 fees/dexswap/index.ts diff --git a/aggregators/dexswap/index.ts b/aggregators/dexswap/index.ts new file mode 100644 index 0000000000..e288d6fd48 --- /dev/null +++ b/aggregators/dexswap/index.ts @@ -0,0 +1,61 @@ +import { FetchOptions } from "../../adapters/types" +import { exportDexVolumeAndFees } from "../../helpers/dexVolumeLogs"; +import request, { gql } from "graphql-request"; +import { SimpleAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import BigNumber from "bignumber.js"; + +const FACTORY_ADDRESS = '0x3e40739d8478c58f9b973266974c58998d4f9e8b'; + +const apiKey = ''; +const graphUrl = `https://gateway-arbitrum.network.thegraph.com/api/${apiKey}/subgraphs/id/AaAYom6ATrw15xZq3LJijLHsBj8xWdcL11Xg6sCxEBqZ`; + +const startDate = 1684702800; + +const fetch = async (options: FetchOptions) => { + const dataFactory = await request(graphUrl, gql + `{ + dexSwapFactories { + totalVolumeETH + } + }` + ) + const totalVolume = dataFactory.dexSwapFactories[0].totalVolumeETH; + let totalFees = new BigNumber(0); + let date = startDate; + while (true) { + const dataFees = await request(graphUrl, gql + `query DexSwapFees { + dexSwapFees(first: 900, orderBy: timestamp, where: { timestamp_gt: ${date} }) { + volume, + timestamp + } + }` + ) + if (!dataFees.dexSwapFees.length) break; + dataFees.dexSwapFees.forEach((data) => { + totalFees = totalFees.plus(data.volume); + }) + const last = dataFees.dexSwapFees[dataFees.dexSwapFees.length - 1].timestamp; + if (last === date) break; + date = last; + } + const dailyData = await exportDexVolumeAndFees({ chain: CHAIN.ARBITRUM, factory: FACTORY_ADDRESS })(options.endTimestamp, {}, options); + return { + ...dailyData, + totalVolume, + totalFees: totalFees.div(10 ** 18).toString(), + } +} + +const adapter: SimpleAdapter = { + version: 2, + adapter: { + [CHAIN.ARBITRUM]: { + fetch, + start: startDate, + }, + } +}; + +export default adapter; diff --git a/dexs/dexswap/index.ts b/dexs/dexswap/index.ts new file mode 100644 index 0000000000..e288d6fd48 --- /dev/null +++ b/dexs/dexswap/index.ts @@ -0,0 +1,61 @@ +import { FetchOptions } from "../../adapters/types" +import { exportDexVolumeAndFees } from "../../helpers/dexVolumeLogs"; +import request, { gql } from "graphql-request"; +import { SimpleAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import BigNumber from "bignumber.js"; + +const FACTORY_ADDRESS = '0x3e40739d8478c58f9b973266974c58998d4f9e8b'; + +const apiKey = ''; +const graphUrl = `https://gateway-arbitrum.network.thegraph.com/api/${apiKey}/subgraphs/id/AaAYom6ATrw15xZq3LJijLHsBj8xWdcL11Xg6sCxEBqZ`; + +const startDate = 1684702800; + +const fetch = async (options: FetchOptions) => { + const dataFactory = await request(graphUrl, gql + `{ + dexSwapFactories { + totalVolumeETH + } + }` + ) + const totalVolume = dataFactory.dexSwapFactories[0].totalVolumeETH; + let totalFees = new BigNumber(0); + let date = startDate; + while (true) { + const dataFees = await request(graphUrl, gql + `query DexSwapFees { + dexSwapFees(first: 900, orderBy: timestamp, where: { timestamp_gt: ${date} }) { + volume, + timestamp + } + }` + ) + if (!dataFees.dexSwapFees.length) break; + dataFees.dexSwapFees.forEach((data) => { + totalFees = totalFees.plus(data.volume); + }) + const last = dataFees.dexSwapFees[dataFees.dexSwapFees.length - 1].timestamp; + if (last === date) break; + date = last; + } + const dailyData = await exportDexVolumeAndFees({ chain: CHAIN.ARBITRUM, factory: FACTORY_ADDRESS })(options.endTimestamp, {}, options); + return { + ...dailyData, + totalVolume, + totalFees: totalFees.div(10 ** 18).toString(), + } +} + +const adapter: SimpleAdapter = { + version: 2, + adapter: { + [CHAIN.ARBITRUM]: { + fetch, + start: startDate, + }, + } +}; + +export default adapter; diff --git a/fees/dexswap/index.ts b/fees/dexswap/index.ts new file mode 100644 index 0000000000..e288d6fd48 --- /dev/null +++ b/fees/dexswap/index.ts @@ -0,0 +1,61 @@ +import { FetchOptions } from "../../adapters/types" +import { exportDexVolumeAndFees } from "../../helpers/dexVolumeLogs"; +import request, { gql } from "graphql-request"; +import { SimpleAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import BigNumber from "bignumber.js"; + +const FACTORY_ADDRESS = '0x3e40739d8478c58f9b973266974c58998d4f9e8b'; + +const apiKey = ''; +const graphUrl = `https://gateway-arbitrum.network.thegraph.com/api/${apiKey}/subgraphs/id/AaAYom6ATrw15xZq3LJijLHsBj8xWdcL11Xg6sCxEBqZ`; + +const startDate = 1684702800; + +const fetch = async (options: FetchOptions) => { + const dataFactory = await request(graphUrl, gql + `{ + dexSwapFactories { + totalVolumeETH + } + }` + ) + const totalVolume = dataFactory.dexSwapFactories[0].totalVolumeETH; + let totalFees = new BigNumber(0); + let date = startDate; + while (true) { + const dataFees = await request(graphUrl, gql + `query DexSwapFees { + dexSwapFees(first: 900, orderBy: timestamp, where: { timestamp_gt: ${date} }) { + volume, + timestamp + } + }` + ) + if (!dataFees.dexSwapFees.length) break; + dataFees.dexSwapFees.forEach((data) => { + totalFees = totalFees.plus(data.volume); + }) + const last = dataFees.dexSwapFees[dataFees.dexSwapFees.length - 1].timestamp; + if (last === date) break; + date = last; + } + const dailyData = await exportDexVolumeAndFees({ chain: CHAIN.ARBITRUM, factory: FACTORY_ADDRESS })(options.endTimestamp, {}, options); + return { + ...dailyData, + totalVolume, + totalFees: totalFees.div(10 ** 18).toString(), + } +} + +const adapter: SimpleAdapter = { + version: 2, + adapter: { + [CHAIN.ARBITRUM]: { + fetch, + start: startDate, + }, + } +}; + +export default adapter; From 48540bc0863c256ccfe1f513aee0a0dff4c99913 Mon Sep 17 00:00:00 2001 From: SolTradingBot <150901232+soltradingbot@users.noreply.github.com> Date: Fri, 19 Jul 2024 22:14:55 +0700 Subject: [PATCH 048/105] Add SolTradingBot fee Add SolTradingBot fee --- fees/stbot.ts | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 fees/stbot.ts diff --git a/fees/stbot.ts b/fees/stbot.ts new file mode 100644 index 0000000000..55b49fdb8b --- /dev/null +++ b/fees/stbot.ts @@ -0,0 +1,27 @@ +import { FetchOptions, SimpleAdapter } from "../adapters/types"; +import { CHAIN } from "../helpers/chains"; +import { queryDune } from "../helpers/dune"; + +const fetch: any = async (options: FetchOptions) => { + const dailyFees = options.createBalances(); + const value = (await queryDune("3929011", { + start: options.startTimestamp, + end: options.endTimestamp, + })); + dailyFees.add('So11111111111111111111111111111111111111112', value[0].fee_token_amount); + + return { dailyFees, dailyRevenue: dailyFees } +} + +const adapter: SimpleAdapter = { + version: 2, + adapter: { + [CHAIN.SOLANA]: { + fetch: fetch, + start: 0, + }, + }, + isExpensiveAdapter: true +}; + +export default adapter; \ No newline at end of file From 2d57e73ca53f2d3b53e66b0dfb5decb4b4f2534b Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Fri, 19 Jul 2024 15:18:16 +0000 Subject: [PATCH 049/105] fix allow run houry --- dexs/flashtrade/index.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/dexs/flashtrade/index.ts b/dexs/flashtrade/index.ts index acb6c3f06f..0366700507 100644 --- a/dexs/flashtrade/index.ts +++ b/dexs/flashtrade/index.ts @@ -20,8 +20,6 @@ const adapter: BreakdownAdapter = { perp: { [CHAIN.SOLANA]: { fetch: fetchPerpVolume, - runAtCurrTime: true, - customBackfill: undefined, start: 1710028800 // start time llama collect } } From eeca17690a924ca53c2dbb05194d0279eabad101 Mon Sep 17 00:00:00 2001 From: Apeguru Date: Fri, 19 Jul 2024 17:06:28 +0100 Subject: [PATCH 050/105] feat: Include bribe data --- dexs/lynex/index.ts | 2 +- fees/lynex-v1.ts | 4 +-- fees/lynex.ts | 61 ++++++++++++++++++++++++++++++++++++--------- 3 files changed, 51 insertions(+), 16 deletions(-) diff --git a/dexs/lynex/index.ts b/dexs/lynex/index.ts index aebddd92b1..e196e1a0d3 100644 --- a/dexs/lynex/index.ts +++ b/dexs/lynex/index.ts @@ -2,7 +2,7 @@ import { CHAIN } from "../../helpers/chains"; import { univ2Adapter } from "../../helpers/getUniSubgraphVolume"; const adapters = univ2Adapter({ - [CHAIN.LINEA]: "https://graph-query.linea.build/subgraphs/name/cryptoalgebra/analytics" + [CHAIN.LINEA]: "https://api.studio.thegraph.com/query/59052/lynex-cl/v1.0.1" }, { factoriesName: "factories", dayData: "algebraDayData", diff --git a/fees/lynex-v1.ts b/fees/lynex-v1.ts index f5515e117d..5d201f128e 100644 --- a/fees/lynex-v1.ts +++ b/fees/lynex-v1.ts @@ -1,10 +1,8 @@ import { Chain } from "@defillama/sdk/build/general"; import BigNumber from "bignumber.js"; import request, { gql } from "graphql-request"; -import { Adapter, FetchOptions, FetchResultFees, FetchResultV2 } from "../adapters/types"; +import { Adapter, FetchOptions, FetchResultV2 } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; -import { getUniqStartOfTodayTimestamp } from "../helpers/getUniSubgraphVolume"; -import { getTimestampAtStartOfDayUTC } from "../utils/date"; interface IPairDayData { id: string; diff --git a/fees/lynex.ts b/fees/lynex.ts index d13fba111c..082a0c9b38 100644 --- a/fees/lynex.ts +++ b/fees/lynex.ts @@ -1,3 +1,4 @@ +import * as sdk from "@defillama/sdk"; import { Chain } from "@defillama/sdk/build/general"; import BigNumber from "bignumber.js"; import request, { gql } from "graphql-request"; @@ -5,7 +6,10 @@ import { Adapter, FetchResultFees } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; import { getUniqStartOfTodayTimestamp } from "../helpers/getUniSubgraphVolume"; import { getTimestampAtStartOfDayUTC } from "../utils/date"; +import { FetchOptions } from "../adapters/types"; +const LYNX = '0x1a51b19ce03dbe0cb44c1528e34a7edd7771e9af'; +const bveLYNX = '0xe8a4c9b6a2b79fd844c9e3adbc8dc841eece557b'; interface IPoolData { id: number; feesUSD: string; @@ -16,26 +20,58 @@ type IURL = { } const endpoints: IURL = { - [CHAIN.LINEA]: "https://graph-query.linea.build/subgraphs/name/cryptoalgebra/analytics" + [CHAIN.LINEA]: "https://api.studio.thegraph.com/query/59052/lynex-cl/v1.0.1" } -const fetch = (chain: Chain) => { - return async (timestamp: number): Promise => { +const event_reward_added = 'event RewardAdded(address indexed rewardToken,uint256 reward,uint256 startTimestamp)'; +const event_gauge_created = 'event GaugeCreated(address indexed gauge, address creator,address internal_bribe,address indexed external_bribe,address indexed pool)' + +export const fees_bribes = async ({ getLogs, createBalances, getToBlock }: FetchOptions): Promise => { + const voter = '0x0B2c83B6e39E32f694a86633B4d1Fe69d13b63c5'; + const dailyFees = createBalances() + const logs_geuge_created = (await getLogs({ + target: voter, + fromBlock: 2207763, + toBlock: await getToBlock(), + eventAbi: event_gauge_created, + cacheInCloud: true, + })) + const bribes_contract: string[] = logs_geuge_created.map((e: any) => e.external_bribe.toLowerCase()); + + const logs = await getLogs({ + targets: bribes_contract, + eventAbi: event_reward_added, + }) + logs.map((e: any) => { + // NOTE: bveLYNX is a derivative token 1:1 to LYNX and should be counted as LYNX as it is not tracked in coingecko + if (e.rewardToken.toLowerCase() === bveLYNX) + dailyFees.add(LYNX, e.reward) + else + dailyFees.add(e.rewardToken, e.reward) + }) + return dailyFees; +} + + +const fetch = async (fetchOptions: FetchOptions): Promise => { + const chain = fetchOptions.chain; + const timestamp = fetchOptions.startOfDay; const todayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)); const dateId = Math.floor(getTimestampAtStartOfDayUTC(todayTimestamp) / 86400) const graphQuery = gql ` - { - algebraDayData(id: ${dateId}) { - id - feesUSD - } - } - `; + { + algebraDayData(id: ${dateId}) { + id + feesUSD + } + } + `; const graphRes: IPoolData = (await request(endpoints[chain], graphQuery)).algebraDayData; const dailyFeeUSD = graphRes; const dailyFee = dailyFeeUSD?.feesUSD ? new BigNumber(dailyFeeUSD.feesUSD) : undefined + const dailyBribesRevenue = await fees_bribes(fetchOptions) if (dailyFee === undefined) return { timestamp } return { @@ -44,14 +80,15 @@ const fetch = (chain: Chain) => { dailyUserFees: dailyFee.toString(), dailyRevenue: dailyFee.toString(), dailyHoldersRevenue: dailyFee.toString(), + dailyBribesRevenue }; - }; } const adapter: Adapter = { + version: 2, adapter: { [CHAIN.LINEA]: { - fetch: fetch(CHAIN.LINEA), + fetch: fetch, start: 1691394680, }, }, From 4dcbf0faaec2c975ab47314e77eeeec3aa23a751 Mon Sep 17 00:00:00 2001 From: Define101 Date: Fri, 19 Jul 2024 17:55:26 +0100 Subject: [PATCH 051/105] add eddy finance --- protocols/eddyfinance-v2.ts | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 protocols/eddyfinance-v2.ts diff --git a/protocols/eddyfinance-v2.ts b/protocols/eddyfinance-v2.ts new file mode 100644 index 0000000000..419127fca9 --- /dev/null +++ b/protocols/eddyfinance-v2.ts @@ -0,0 +1,7 @@ +import { uniV2Exports } from "../helpers/uniswap"; + +export default uniV2Exports({ + zeta: { + factory: '0x9fd96203f7b22bCF72d9DCb40ff98302376cE09c', + } +}) \ No newline at end of file From 3059594ed93814fe69b50729e7717bdc12eb73b0 Mon Sep 17 00:00:00 2001 From: Define101 <93603962+Define101@users.noreply.github.com> Date: Fri, 19 Jul 2024 18:00:03 +0100 Subject: [PATCH 052/105] add eddy finance (#1688) --- protocols/eddyfinance-v2.ts | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 protocols/eddyfinance-v2.ts diff --git a/protocols/eddyfinance-v2.ts b/protocols/eddyfinance-v2.ts new file mode 100644 index 0000000000..419127fca9 --- /dev/null +++ b/protocols/eddyfinance-v2.ts @@ -0,0 +1,7 @@ +import { uniV2Exports } from "../helpers/uniswap"; + +export default uniV2Exports({ + zeta: { + factory: '0x9fd96203f7b22bCF72d9DCb40ff98302376cE09c', + } +}) \ No newline at end of file From 41da509ac61a3bbfa9fabd3e9991b4b00c383073 Mon Sep 17 00:00:00 2001 From: Define101 Date: Fri, 19 Jul 2024 19:49:25 +0100 Subject: [PATCH 053/105] add zeta chain to iziswap --- dexs/iziswap/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/dexs/iziswap/index.ts b/dexs/iziswap/index.ts index 2f82a1ed08..02b4acf279 100644 --- a/dexs/iziswap/index.ts +++ b/dexs/iziswap/index.ts @@ -34,6 +34,7 @@ const chains: TChains = { [CHAIN.SCROLL]: 534352, [CHAIN.BASE]: 8453, [CHAIN.MANTA]: 169, + [CHAIN.ZETA]: 7000 }; const fetch = (chain: Chain) => { From 48d4b2144f53abc170d4c3ee5bf9c5b2628aa6c9 Mon Sep 17 00:00:00 2001 From: chef-plankton Date: Fri, 19 Jul 2024 23:58:37 +0330 Subject: [PATCH 054/105] integrate AKKA in aggregators --- aggregators/akka/index.ts | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 aggregators/akka/index.ts diff --git a/aggregators/akka/index.ts b/aggregators/akka/index.ts new file mode 100644 index 0000000000..528cc4181c --- /dev/null +++ b/aggregators/akka/index.ts @@ -0,0 +1,35 @@ +import fetchURL from "../../utils/fetchURL" +import { FetchResult, SimpleAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; + +const URL = 'https://routerv2.akka.finance'; +const endpoint = '/v2/1116/statistics/dappradar'; +const startTimestamp = 1717200000;// 6/1/2024 + +interface IAPIResponse { + dailyVolume: string; + totalVolume: string; +} + +const fetch = async (timestamp: number): Promise => { + const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)); + const { dailyVolume, totalVolume }: IAPIResponse = (await fetchURL(`${URL}${endpoint}`)); + return { + dailyVolume, + totalVolume, + timestamp: dayTimestamp, + }; +} + +const adapter: SimpleAdapter = { + version: 2, + adapter: { + [CHAIN.CORE]: { + fetch, + start: startTimestamp, + }, + }, +}; + +export default adapter; From 0216f3776ec3d298b14a1661e2de1c16296350b7 Mon Sep 17 00:00:00 2001 From: rohithkumar0369 Date: Sat, 20 Jul 2024 18:31:16 +0530 Subject: [PATCH 055/105] kana id updated --- aggregators/kanalabs/index.ts | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/aggregators/kanalabs/index.ts b/aggregators/kanalabs/index.ts index fc31fc0fe4..169079264d 100644 --- a/aggregators/kanalabs/index.ts +++ b/aggregators/kanalabs/index.ts @@ -10,14 +10,15 @@ export enum KanaChainID { "solana" = 1, "aptos" = 2, "polygon" = 3, - "ethereum" = 4, - "bsc" = 5, - "klaytn" = 6, - "sui" = 8, - "Arbitrum" = 9, + "bsc" = 4, + "sui" = 5, + "ethereum" = 6, + "base" = 7, + "klaytn" = 8, + "zkSync" = 9, "Avalanche" = 10, - "zkSync" = 11, - "base" = 12, + "Arbitrum" = 11, + "optimistic" = 12, } const fetch = (chain: KanaChainID) => async (timestamp: number) => { From f9efd5b76a29d957e31f29ca936fdb654a38b081 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Sat, 20 Jul 2024 16:20:12 +0000 Subject: [PATCH 056/105] fix version --- aggregator-derivatives/bitoro/index.ts | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/aggregator-derivatives/bitoro/index.ts b/aggregator-derivatives/bitoro/index.ts index 01401e55b5..94f42515b4 100644 --- a/aggregator-derivatives/bitoro/index.ts +++ b/aggregator-derivatives/bitoro/index.ts @@ -1,5 +1,5 @@ import fetchURL from "../../utils/fetchURL"; -import { FetchResultV2 } from "../../adapters/types"; +import { FetchResult, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; const BitoroX_BASE_URL = "https://min-api.bitoro.network/btr/stats/global"; @@ -15,29 +15,31 @@ const getBitoroProUrl = (startTime: number, endTime: number): string => { return `${BitoroPro_BASE_URL}?start=${startTime}&end=${endTime}`; } -const fetchBitoroX = async (options: any): Promise => { +const fetchBitoroX = async (_:any, _b:any ,options: any): Promise => { const { endTimestamp, startTimestamp } = options; const dailyVolume = await fetchURL(getBitoroXUrl(startTimestamp, endTimestamp)); const totalVolume = await fetchURL(getBitoroXUrl(startTimestamp_bitoro_x, endTimestamp)); return { + timestamp: startTimestamp, dailyVolume: dailyVolume.volume || 0, totalVolume: totalVolume.volume || 0, }; }; -const fetchBitoroPro = async (options: any): Promise => { +const fetchBitoroPro = async (_:any, _b:any ,options: any): Promise => { const { fromTimestamp, toTimestamp } = options; const dailyVolume = await fetchURL(getBitoroProUrl(fromTimestamp, toTimestamp)); const totalVolume = await fetchURL(getBitoroProUrl(startTimestamp_bitoro_pro, toTimestamp)); return { + timestamp: fromTimestamp, dailyVolume: dailyVolume.volume || 0, totalVolume: totalVolume.volume || 0, }; }; -export default { +const adapter: SimpleAdapter = { adapter: { [CHAIN.ARBITRUM]: { fetch: fetchBitoroX, @@ -47,6 +49,7 @@ export default { fetch: fetchBitoroPro, start: startTimestamp_bitoro_pro } - }, - version: 2 + } } + +export default adapter; From 9519728dcaf0db0ae5f4a9c2741156f077fc2394 Mon Sep 17 00:00:00 2001 From: Chase Manning Date: Sun, 21 Jul 2024 13:19:23 +0100 Subject: [PATCH 057/105] fix issue with querying the wrong value from the event --- dexs/tlx-finance/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dexs/tlx-finance/index.ts b/dexs/tlx-finance/index.ts index 359fd15d97..7cbf27a947 100644 --- a/dexs/tlx-finance/index.ts +++ b/dexs/tlx-finance/index.ts @@ -38,13 +38,13 @@ const fetchLeveragedTokenVolume = async ( const mint_valume = mints_logs.map((logs, i) => { return logs.map((log: any) => { - return new BigNumber(log.baseAssetAmount).times(targetLeverages[i]).div(1e18) + return new BigNumber(log.leveragedTokenAmount).times(targetLeverages[i]).div(1e18) }) }).flat().reduce((acc: any, log: any) => acc.plus(log), new BigNumber(0)); const redeem_valume = redeems_logs.map((logs, i) => { return logs.map((log: any) => { - return new BigNumber(log.baseAssetAmount).times(targetLeverages[i]).div(1e18) + return new BigNumber(log.leveragedTokenAmount).times(targetLeverages[i]).div(1e18) }) }).flat().reduce((acc: any, log: any) => acc.plus(log), new BigNumber(0)); From eced3352957dd211e0af8e379b6b7ef540cf2e25 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Mon, 22 Jul 2024 06:01:48 +0000 Subject: [PATCH 058/105] fix fees and token price --- fees/size-credit.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/fees/size-credit.ts b/fees/size-credit.ts index 1075b7104a..76cb78579a 100644 --- a/fees/size-credit.ts +++ b/fees/size-credit.ts @@ -4,7 +4,7 @@ import { CHAIN } from "../helpers/chains"; const SZWETH_CONTRACT = '0x974583f05de1fd18c59c77c4a8803cf0c7db5333'; const SZAUSDC_CONTRACT = '0x38978038a06a21602a4202dfa66968e7f525bf3e'; -const AUSDC_CONTRACT = '0x4e65fe4dba92790696d040ac24aa414708f5c0ab'; +const AUSDC_CONTRACT = '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913'; const SIZE_PROXY_CONTRACT = '0xC2a429681CAd7C1ce36442fbf7A4a68B11eFF940'; const fetch: any = async ({ createBalances, getLogs, api, getFromBlock, getToBlock }: FetchOptions) => { @@ -36,7 +36,7 @@ const fetch: any = async ({ createBalances, getLogs, api, getFromBlock, getToBlo const feeRecipient = feeConfig.feeRecipient; logsArray.forEach((logs, i) => { logs.forEach((log) => { - if (log.to === feeRecipient) { + if (log.to.toLowerCase() === feeRecipient.toLowerCase()) { fees.add(FEE_MAPPING[i], Number(log.value)); } }) @@ -44,6 +44,7 @@ const fetch: any = async ({ createBalances, getLogs, api, getFromBlock, getToBlo return { dailyFees: fees, + dailyRevenue: fees, dailyProtocolRevenue: fees }; }; @@ -65,4 +66,4 @@ const adapter: Adapter = { }, } } -export default adapter; \ No newline at end of file +export default adapter; From 2062d7dda545e71234da994ae321d22e343bf988 Mon Sep 17 00:00:00 2001 From: lsblk07 Date: Mon, 22 Jul 2024 09:04:36 +0300 Subject: [PATCH 059/105] blasterswap v3 volume --- protocols/blasterswap-v3.ts | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 protocols/blasterswap-v3.ts diff --git a/protocols/blasterswap-v3.ts b/protocols/blasterswap-v3.ts new file mode 100644 index 0000000000..33a62fd19f --- /dev/null +++ b/protocols/blasterswap-v3.ts @@ -0,0 +1,7 @@ +import { uniV3Exports } from "../helpers/uniswap"; + +export default uniV3Exports({ + blast: { + factory: '0x1A8027625C830aAC43aD82a3f7cD6D5fdCE89d78', + } +}) From 257b144ff988a8dbcc0e4defa18db2f09b2f21a2 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Mon, 22 Jul 2024 06:06:47 +0000 Subject: [PATCH 060/105] fix token price --- fees/size-credit.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/fees/size-credit.ts b/fees/size-credit.ts index 76cb78579a..dbe94b9394 100644 --- a/fees/size-credit.ts +++ b/fees/size-credit.ts @@ -4,7 +4,7 @@ import { CHAIN } from "../helpers/chains"; const SZWETH_CONTRACT = '0x974583f05de1fd18c59c77c4a8803cf0c7db5333'; const SZAUSDC_CONTRACT = '0x38978038a06a21602a4202dfa66968e7f525bf3e'; -const AUSDC_CONTRACT = '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913'; +const AUSDC_CONTRACT = '0x4e65fe4dba92790696d040ac24aa414708f5c0ab'; const SIZE_PROXY_CONTRACT = '0xC2a429681CAd7C1ce36442fbf7A4a68B11eFF940'; const fetch: any = async ({ createBalances, getLogs, api, getFromBlock, getToBlock }: FetchOptions) => { @@ -41,6 +41,7 @@ const fetch: any = async ({ createBalances, getLogs, api, getFromBlock, getToBlo } }) }) + console.log(await fees.getUSDJSONs()) return { dailyFees: fees, From 42d92c7e0844b4eedd1448266cbb89f05cdbf7be Mon Sep 17 00:00:00 2001 From: "bryan.y" Date: Mon, 22 Jul 2024 16:42:11 +0800 Subject: [PATCH 061/105] fix: optimize v2 daily volume request with sleep 2s interval --- dexs/apollox/index.ts | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/dexs/apollox/index.ts b/dexs/apollox/index.ts index 485a51b307..5b326c042d 100644 --- a/dexs/apollox/index.ts +++ b/dexs/apollox/index.ts @@ -63,15 +63,21 @@ const v2VolumeAPI = const v1VolumeAPI = "https://www.apollox.finance/fapi/v1/ticker/24hr"; +async function sleep (time: number) { + return new Promise((resolve) => setTimeout(() => resolve(), time)) +} +let sleepCount = 0 const fetchV2Volume = async (chain: Chain) => { - const url = `${v2VolumeAPI}?chain=${chain}&excludeCake=true`; - const { data = [] } = ( - await httpGet(url) + console.log('fetch ', chain, sleepCount * 2 * 1e3) + // This is very important!!! because our API will throw error when send >=2 requests at the same time. + await sleep(sleepCount++ * 2 * 1e3) + const res = ( + await httpGet(v2VolumeAPI, { params: { chain, excludeCake: true } }) ) as { data: ResponseItem[] } - if (!data) { - return 0; + if (res.data === null) { + console.log(res, v2VolumeAPI, { chain, excludeCake: true }) } - const dailyVolume = data.reduce((p, c) => p + +c.qutoVol, 0); + const dailyVolume = (res.data || []).reduce((p, c) => p + +c.qutoVol, 0); return dailyVolume }; From ce8460467db1f563e06b5b57a6cf2bed39221101 Mon Sep 17 00:00:00 2001 From: Pavel Shuvalov Date: Mon, 22 Jul 2024 14:12:50 +0200 Subject: [PATCH 062/105] DeDust volume export --- dexs/dedust/index.ts | 92 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 dexs/dedust/index.ts diff --git a/dexs/dedust/index.ts b/dexs/dedust/index.ts new file mode 100644 index 0000000000..66ed3cd428 --- /dev/null +++ b/dexs/dedust/index.ts @@ -0,0 +1,92 @@ +import { postURL } from "../../utils/fetchURL" +import { CHAIN } from "../../helpers/chains"; +import { FetchOptions } from "../../adapters/types"; + +const GRAPHQL_ENDPOINT = 'https://api.dedust.io/v3/graphql'; + +const POOLS_QUERY = ` +query GetPools($filter: PoolsFiltersInput) { + pools(filter: $filter) { + address + totalSupply + type + tradeFee + assets + reserves + fees + volume + } + } +`; + +const ASSETS_QUERY = ` +query GetAssets { + assets { + type + address + symbol + decimals + price + } + } +`; + + +const fetch = async (options: FetchOptions) => { + console.log("Requesting assets list") + const assetsList = (await postURL(GRAPHQL_ENDPOINT, { + query: ASSETS_QUERY, + operationName: 'GetAssets' + })).data.assets; + + const assetInfo = {}; + for (const asset of assetsList) { + const address = asset.type == 'native' ? 'native' : 'jetton:' + asset.address; + assetInfo[address] = { + decimals: asset.decimals, + price: Number(asset.price), + symbol: asset.symbol + } + } + console.log(`Inited ${Object.keys(assetInfo).length} assets`); + + console.log("Requesting pools list") + const poolsList = (await postURL(GRAPHQL_ENDPOINT, { + query: POOLS_QUERY, + operationName: 'GetPools' + })).data.pools; + + let dailyVolume = 0; + for (const pool of poolsList) { + const address = pool.address; + const leftAddr = pool.assets[0]; + const rightAddr = pool.assets[1]; + if (!(leftAddr in assetInfo && rightAddr in assetInfo)) { + console.warn("No assets info for pool", pool); + continue; + } + const left = assetInfo[leftAddr]; + const right = assetInfo[rightAddr]; + + dailyVolume += (left.price * Number(pool.volume[0]) / Math.pow(10, left.decimals) + + right.price * Number(pool.volume[1]) / Math.pow(10, right.decimals)) / 2; + } + + return { + dailyVolume: dailyVolume + }; +}; + + +const adapter: any = { + version: 2, + adapter: { + [CHAIN.TON]: { + fetch, + runAtCurrTime: true, + start: 1681931480, + }, + }, +}; + +export default adapter; From c1373ae0ce90eb947e14d6d4092cfd7d86a8b594 Mon Sep 17 00:00:00 2001 From: slasher125 Date: Mon, 22 Jul 2024 19:07:32 +0400 Subject: [PATCH 063/105] baseswap change v3 endpoint --- dexs/baseswap/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexs/baseswap/index.ts b/dexs/baseswap/index.ts index fa6b8f4175..e4b014d39c 100644 --- a/dexs/baseswap/index.ts +++ b/dexs/baseswap/index.ts @@ -15,7 +15,7 @@ const v2Endpoints: ChainEndpoints = { [CHAIN.BASE]: sdk.graph.modifyEndpoint('BWHCfpXMHFDx3u4E14hEwv4ST7SUyN89FKJ2RjzWKgA9'), }; const v3Endpoints = { - [CHAIN.BASE]: sdk.graph.modifyEndpoint('39pzQzH5r3vmovd9fTs7rVDVFCj1xJye3dTMNHcSkSfL'), + [CHAIN.BASE]: 'https://api.goldsky.com/api/public/project_cltceeuudv1ij01x7ekxhfl46/subgraphs/v3-base/prod/gn' }; // Fetch function to query the subgraphs From c82f7a5ecda240ac27c26095d41fe7a0bf6ecc8e Mon Sep 17 00:00:00 2001 From: Dongminh1997 Date: Tue, 23 Jul 2024 03:12:06 +0700 Subject: [PATCH 064/105] Update index.ts --- aggregators/magpie/index.ts | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/aggregators/magpie/index.ts b/aggregators/magpie/index.ts index fa409d15f5..a633797290 100644 --- a/aggregators/magpie/index.ts +++ b/aggregators/magpie/index.ts @@ -58,6 +58,41 @@ const fetch = async (timestamp: number, _: ChainBlocks, {chain}: FetchOptions): runAtCurrTime: true, start: 1662595200, }, + [CHAIN.SCROLL]: { + fetch: fetch, + runAtCurrTime: true, + start: 1662595200, + }, + [CHAIN.MANTA]: { + fetch: fetch, + runAtCurrTime: true, + start: 1662595200, + }, + [CHAIN.TAIKO]: { + fetch: fetch, + runAtCurrTime: true, + start: 1662595200, + }, + [CHAIN.POLYGON_ZKEVM]: { + fetch: fetch, + runAtCurrTime: true, + start: 1662595200, + }, + [CHAIN.BLAST]: { + fetch: fetch, + runAtCurrTime: true, + start: 1662595200, + }, + [CHAIN.METIS]: { + fetch: fetch, + runAtCurrTime: true, + start: 1662595200, + }, + [CHAIN.FANTOM]: { + fetch: fetch, + runAtCurrTime: true, + start: 1662595200, + }, }, isExpensiveAdapter: true, }; From 95562e2e098af040f1aa602bdf869e460850d00d Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 23 Jul 2024 15:58:28 +0000 Subject: [PATCH 065/105] fix adapter --- dexs/dexswap/index.ts | 44 +------------------------------ fees/dexswap/index.ts | 61 ------------------------------------------- 2 files changed, 1 insertion(+), 104 deletions(-) delete mode 100644 fees/dexswap/index.ts diff --git a/dexs/dexswap/index.ts b/dexs/dexswap/index.ts index e288d6fd48..e11957c30c 100644 --- a/dexs/dexswap/index.ts +++ b/dexs/dexswap/index.ts @@ -1,58 +1,16 @@ import { FetchOptions } from "../../adapters/types" import { exportDexVolumeAndFees } from "../../helpers/dexVolumeLogs"; -import request, { gql } from "graphql-request"; import { SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import BigNumber from "bignumber.js"; const FACTORY_ADDRESS = '0x3e40739d8478c58f9b973266974c58998d4f9e8b'; - -const apiKey = ''; -const graphUrl = `https://gateway-arbitrum.network.thegraph.com/api/${apiKey}/subgraphs/id/AaAYom6ATrw15xZq3LJijLHsBj8xWdcL11Xg6sCxEBqZ`; - const startDate = 1684702800; -const fetch = async (options: FetchOptions) => { - const dataFactory = await request(graphUrl, gql - `{ - dexSwapFactories { - totalVolumeETH - } - }` - ) - const totalVolume = dataFactory.dexSwapFactories[0].totalVolumeETH; - let totalFees = new BigNumber(0); - let date = startDate; - while (true) { - const dataFees = await request(graphUrl, gql - `query DexSwapFees { - dexSwapFees(first: 900, orderBy: timestamp, where: { timestamp_gt: ${date} }) { - volume, - timestamp - } - }` - ) - if (!dataFees.dexSwapFees.length) break; - dataFees.dexSwapFees.forEach((data) => { - totalFees = totalFees.plus(data.volume); - }) - const last = dataFees.dexSwapFees[dataFees.dexSwapFees.length - 1].timestamp; - if (last === date) break; - date = last; - } - const dailyData = await exportDexVolumeAndFees({ chain: CHAIN.ARBITRUM, factory: FACTORY_ADDRESS })(options.endTimestamp, {}, options); - return { - ...dailyData, - totalVolume, - totalFees: totalFees.div(10 ** 18).toString(), - } -} - const adapter: SimpleAdapter = { version: 2, adapter: { [CHAIN.ARBITRUM]: { - fetch, + fetch: (options: FetchOptions) => exportDexVolumeAndFees({ chain: CHAIN.ARBITRUM, factory: FACTORY_ADDRESS })(options.endTimestamp, {}, options), start: startDate, }, } diff --git a/fees/dexswap/index.ts b/fees/dexswap/index.ts deleted file mode 100644 index e288d6fd48..0000000000 --- a/fees/dexswap/index.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { FetchOptions } from "../../adapters/types" -import { exportDexVolumeAndFees } from "../../helpers/dexVolumeLogs"; -import request, { gql } from "graphql-request"; -import { SimpleAdapter } from "../../adapters/types"; -import { CHAIN } from "../../helpers/chains"; -import BigNumber from "bignumber.js"; - -const FACTORY_ADDRESS = '0x3e40739d8478c58f9b973266974c58998d4f9e8b'; - -const apiKey = ''; -const graphUrl = `https://gateway-arbitrum.network.thegraph.com/api/${apiKey}/subgraphs/id/AaAYom6ATrw15xZq3LJijLHsBj8xWdcL11Xg6sCxEBqZ`; - -const startDate = 1684702800; - -const fetch = async (options: FetchOptions) => { - const dataFactory = await request(graphUrl, gql - `{ - dexSwapFactories { - totalVolumeETH - } - }` - ) - const totalVolume = dataFactory.dexSwapFactories[0].totalVolumeETH; - let totalFees = new BigNumber(0); - let date = startDate; - while (true) { - const dataFees = await request(graphUrl, gql - `query DexSwapFees { - dexSwapFees(first: 900, orderBy: timestamp, where: { timestamp_gt: ${date} }) { - volume, - timestamp - } - }` - ) - if (!dataFees.dexSwapFees.length) break; - dataFees.dexSwapFees.forEach((data) => { - totalFees = totalFees.plus(data.volume); - }) - const last = dataFees.dexSwapFees[dataFees.dexSwapFees.length - 1].timestamp; - if (last === date) break; - date = last; - } - const dailyData = await exportDexVolumeAndFees({ chain: CHAIN.ARBITRUM, factory: FACTORY_ADDRESS })(options.endTimestamp, {}, options); - return { - ...dailyData, - totalVolume, - totalFees: totalFees.div(10 ** 18).toString(), - } -} - -const adapter: SimpleAdapter = { - version: 2, - adapter: { - [CHAIN.ARBITRUM]: { - fetch, - start: startDate, - }, - } -}; - -export default adapter; From 086c013e5d6b656b9bf79aaf67d4430a2b85e463 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 23 Jul 2024 16:46:26 +0000 Subject: [PATCH 066/105] fix version --- aggregator-derivatives/perpie/index.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/aggregator-derivatives/perpie/index.ts b/aggregator-derivatives/perpie/index.ts index e14a3578f1..94668c8774 100644 --- a/aggregator-derivatives/perpie/index.ts +++ b/aggregator-derivatives/perpie/index.ts @@ -1,5 +1,6 @@ import { BreakdownAdapter, + Fetch, FetchOptions, FetchResult, FetchResultV2, @@ -45,14 +46,13 @@ const fetchVolumeAndFees: (chain: string) => FetchV2 = }; }; -const fetchAll: (chain: string) => FetchV2 = +const fetchAll: (chain: string) => Fetch = (chain: string) => - async (options: FetchOptions): Promise => { + async (_a: any, _t: any ,options: FetchOptions): Promise => { const volumeAndFees = await fetchVolumeAndFees(chain)(options); - return { ...volumeAndFees } as FetchResultV2; + return { ...volumeAndFees } as FetchResult; }; const adapter: BreakdownAdapter = { - version: 2, isExpensiveAdapter: true, breakdown: { derivatives: { From 2f70005fa9c8fbe8a195ad54620d7a04e7ac716b Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 23 Jul 2024 16:50:18 +0000 Subject: [PATCH 067/105] remove --- aggregators/dexswap/index.ts | 61 ------------------------------------ 1 file changed, 61 deletions(-) delete mode 100644 aggregators/dexswap/index.ts diff --git a/aggregators/dexswap/index.ts b/aggregators/dexswap/index.ts deleted file mode 100644 index e288d6fd48..0000000000 --- a/aggregators/dexswap/index.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { FetchOptions } from "../../adapters/types" -import { exportDexVolumeAndFees } from "../../helpers/dexVolumeLogs"; -import request, { gql } from "graphql-request"; -import { SimpleAdapter } from "../../adapters/types"; -import { CHAIN } from "../../helpers/chains"; -import BigNumber from "bignumber.js"; - -const FACTORY_ADDRESS = '0x3e40739d8478c58f9b973266974c58998d4f9e8b'; - -const apiKey = ''; -const graphUrl = `https://gateway-arbitrum.network.thegraph.com/api/${apiKey}/subgraphs/id/AaAYom6ATrw15xZq3LJijLHsBj8xWdcL11Xg6sCxEBqZ`; - -const startDate = 1684702800; - -const fetch = async (options: FetchOptions) => { - const dataFactory = await request(graphUrl, gql - `{ - dexSwapFactories { - totalVolumeETH - } - }` - ) - const totalVolume = dataFactory.dexSwapFactories[0].totalVolumeETH; - let totalFees = new BigNumber(0); - let date = startDate; - while (true) { - const dataFees = await request(graphUrl, gql - `query DexSwapFees { - dexSwapFees(first: 900, orderBy: timestamp, where: { timestamp_gt: ${date} }) { - volume, - timestamp - } - }` - ) - if (!dataFees.dexSwapFees.length) break; - dataFees.dexSwapFees.forEach((data) => { - totalFees = totalFees.plus(data.volume); - }) - const last = dataFees.dexSwapFees[dataFees.dexSwapFees.length - 1].timestamp; - if (last === date) break; - date = last; - } - const dailyData = await exportDexVolumeAndFees({ chain: CHAIN.ARBITRUM, factory: FACTORY_ADDRESS })(options.endTimestamp, {}, options); - return { - ...dailyData, - totalVolume, - totalFees: totalFees.div(10 ** 18).toString(), - } -} - -const adapter: SimpleAdapter = { - version: 2, - adapter: { - [CHAIN.ARBITRUM]: { - fetch, - start: startDate, - }, - } -}; - -export default adapter; From 7206813e799615841bcb6a4e320ea36601b2222a Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Tue, 23 Jul 2024 17:13:49 +0000 Subject: [PATCH 068/105] remove logs --- dexs/dedust/index.ts | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/dexs/dedust/index.ts b/dexs/dedust/index.ts index 66ed3cd428..6b99b3f44d 100644 --- a/dexs/dedust/index.ts +++ b/dexs/dedust/index.ts @@ -1,6 +1,6 @@ import { postURL } from "../../utils/fetchURL" import { CHAIN } from "../../helpers/chains"; -import { FetchOptions } from "../../adapters/types"; +import { FetchOptions, SimpleAdapter } from "../../adapters/types"; const GRAPHQL_ENDPOINT = 'https://api.dedust.io/v3/graphql'; @@ -33,7 +33,6 @@ query GetAssets { const fetch = async (options: FetchOptions) => { - console.log("Requesting assets list") const assetsList = (await postURL(GRAPHQL_ENDPOINT, { query: ASSETS_QUERY, operationName: 'GetAssets' @@ -48,9 +47,7 @@ const fetch = async (options: FetchOptions) => { symbol: asset.symbol } } - console.log(`Inited ${Object.keys(assetInfo).length} assets`); - console.log("Requesting pools list") const poolsList = (await postURL(GRAPHQL_ENDPOINT, { query: POOLS_QUERY, operationName: 'GetPools' @@ -62,7 +59,6 @@ const fetch = async (options: FetchOptions) => { const leftAddr = pool.assets[0]; const rightAddr = pool.assets[1]; if (!(leftAddr in assetInfo && rightAddr in assetInfo)) { - console.warn("No assets info for pool", pool); continue; } const left = assetInfo[leftAddr]; @@ -78,8 +74,7 @@ const fetch = async (options: FetchOptions) => { }; -const adapter: any = { - version: 2, +const adapter: SimpleAdapter = { adapter: { [CHAIN.TON]: { fetch, From 692626c383397047e21f1c126702c8de2ba06b79 Mon Sep 17 00:00:00 2001 From: h0lme3 Date: Tue, 23 Jul 2024 20:06:17 -0400 Subject: [PATCH 069/105] add zns dimensions --- fees/zns/index.ts | 150 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 150 insertions(+) create mode 100644 fees/zns/index.ts diff --git a/fees/zns/index.ts b/fees/zns/index.ts new file mode 100644 index 0000000000..fa2fae08c2 --- /dev/null +++ b/fees/zns/index.ts @@ -0,0 +1,150 @@ +import { ethers } from "ethers"; +import type { Balances } from "@defillama/sdk"; + +import { Adapter, FetchOptions } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; + +const abi_event = { + mintedDomain: + "event MintedDomain(string domainName, uint256 indexed tokenId, address indexed owner, uint256 expiry)", + renewedDomain: + "event RenewedDomain(uint256 indexed tokenId, uint256 expiry, string domainName)", +}; + +const addresses = { + [CHAIN.BSC]: "0x7e2cf06f092c9f5cf5972ef021635b6c8e1c5bb2", + [CHAIN.SCROLL]: "0xB00910Bac7DA44c0D440798809dbF8d51FDBb635", + [CHAIN.BLAST]: "0x59B9Ac688e39A14b938AC8C3269db66D8aDB9aF6", + [CHAIN.POLYGON]: "0x8ccD9c0A9C084412416A85Fd748c7f1E9b86442D", + [CHAIN.TAIKO]: "0xFb2Cd41a8aeC89EFBb19575C6c48d872cE97A0A5", + [CHAIN.XLAYER]: "0x71709a5f1831ba48c414375fb6a58662a40c01b5", + [CHAIN.ZORA]: "0xf180136DdC9e4F8c9b5A9FE59e2b1f07265C5D4D", + [CHAIN.BOBA]: "0xf1D09DA87c50820eD3b924aFf3C37058eD6eA40e", +}; + +const rpcUrls = { + [CHAIN.BSC]: "https://binance.llamarpc.com", + [CHAIN.SCROLL]: "https://1rpc.io/scroll", + [CHAIN.BLAST]: "https://blast-rpc.publicnode.com", + [CHAIN.POLYGON]: "https://polygon.llamarpc.com", + [CHAIN.TAIKO]: "https://rpc.ankr.com/taiko", + [CHAIN.XLAYER]: "https://endpoints.omniatech.io/v1/xlayer/mainnet/public", + [CHAIN.ZORA]: "https://rpc.zora.energy", + [CHAIN.BOBA]: "https://mainnet.boba.network/", +}; + +const methodology = { + Fees: "registration and renew cost", + Revenue: "registration and renew cost", +}; + +const ABI = [ + { + inputs: [{ internalType: "uint16", name: "len", type: "uint16" }], + name: "priceToRegister", + outputs: [{ internalType: "uint256", name: "", type: "uint256" }], + stateMutability: "view", + type: "function", + }, +]; + +const fetchLogsAndCalculateFees = async ( + options: FetchOptions, + chain: string +): Promise<{ dailyFees: Balances; dailyRevenue: Balances }> => { + const address = addresses[chain]; + const dailyFees = options.createBalances(); + + const rpcUrl = rpcUrls[chain]; + const provider = new ethers.JsonRpcProvider(rpcUrl); + const contract = new ethers.Contract(address, ABI, provider); + + const mintedLogs = await options.getLogs({ + targets: [address], + eventAbi: abi_event.mintedDomain, + }); + + const renewedLogs = await options.getLogs({ + targets: [address], + eventAbi: abi_event.renewedDomain, + }); + + for (const log of mintedLogs.concat(renewedLogs)) { + const domainPrice = await contract.priceToRegister(log.domainName.length); + dailyFees.addGasToken(domainPrice); + } + + return { dailyFees, dailyRevenue: dailyFees }; +}; + +const adapter: Adapter = { + version: 1, + adapter: { + [CHAIN.BSC]: { + fetch: (options: FetchOptions) => + fetchLogsAndCalculateFees(options, CHAIN.BSC), + start: 1677110400, + meta: { + methodology, + }, + }, + [CHAIN.SCROLL]: { + fetch: (options: FetchOptions) => + fetchLogsAndCalculateFees(options, CHAIN.POLYGON), + start: 1677110400, + meta: { + methodology, + }, + }, + [CHAIN.BLAST]: { + fetch: (options: FetchOptions) => + fetchLogsAndCalculateFees(options, CHAIN.BOBA), + start: 1677110400, + meta: { + methodology, + }, + }, + [CHAIN.POLYGON]: { + fetch: (options: FetchOptions) => + fetchLogsAndCalculateFees(options, CHAIN.POLYGON), + start: 1677110400, + meta: { + methodology, + }, + }, + [CHAIN.TAIKO]: { + fetch: (options: FetchOptions) => + fetchLogsAndCalculateFees(options, CHAIN.BOBA), + start: 1677110400, + meta: { + methodology, + }, + }, + [CHAIN.XLAYER]: { + fetch: (options: FetchOptions) => + fetchLogsAndCalculateFees(options, CHAIN.BSC), + start: 1677110400, + meta: { + methodology, + }, + }, + [CHAIN.ZORA]: { + fetch: (options: FetchOptions) => + fetchLogsAndCalculateFees(options, CHAIN.POLYGON), + start: 1677110400, + meta: { + methodology, + }, + }, + [CHAIN.BOBA]: { + fetch: (options: FetchOptions) => + fetchLogsAndCalculateFees(options, CHAIN.BOBA), + start: 1677110400, + meta: { + methodology, + }, + }, + }, +}; + +export default adapter; From abf7040d77e04d58f719018cbe933f040e6dd83a Mon Sep 17 00:00:00 2001 From: h0lme3 Date: Tue, 23 Jul 2024 20:30:03 -0400 Subject: [PATCH 070/105] change version and start timestamp --- fees/zns/index.ts | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/fees/zns/index.ts b/fees/zns/index.ts index fa2fae08c2..3bbff18d54 100644 --- a/fees/zns/index.ts +++ b/fees/zns/index.ts @@ -78,12 +78,12 @@ const fetchLogsAndCalculateFees = async ( }; const adapter: Adapter = { - version: 1, + version: 2, adapter: { [CHAIN.BSC]: { fetch: (options: FetchOptions) => fetchLogsAndCalculateFees(options, CHAIN.BSC), - start: 1677110400, + start: 1714506194, meta: { methodology, }, @@ -91,7 +91,7 @@ const adapter: Adapter = { [CHAIN.SCROLL]: { fetch: (options: FetchOptions) => fetchLogsAndCalculateFees(options, CHAIN.POLYGON), - start: 1677110400, + start: 1714506194, meta: { methodology, }, @@ -99,7 +99,7 @@ const adapter: Adapter = { [CHAIN.BLAST]: { fetch: (options: FetchOptions) => fetchLogsAndCalculateFees(options, CHAIN.BOBA), - start: 1677110400, + start: 1714506194, meta: { methodology, }, @@ -107,7 +107,7 @@ const adapter: Adapter = { [CHAIN.POLYGON]: { fetch: (options: FetchOptions) => fetchLogsAndCalculateFees(options, CHAIN.POLYGON), - start: 1677110400, + start: 1714506194, meta: { methodology, }, @@ -115,7 +115,7 @@ const adapter: Adapter = { [CHAIN.TAIKO]: { fetch: (options: FetchOptions) => fetchLogsAndCalculateFees(options, CHAIN.BOBA), - start: 1677110400, + start: 1714506194, meta: { methodology, }, @@ -123,7 +123,7 @@ const adapter: Adapter = { [CHAIN.XLAYER]: { fetch: (options: FetchOptions) => fetchLogsAndCalculateFees(options, CHAIN.BSC), - start: 1677110400, + start: 1714506194, meta: { methodology, }, @@ -131,7 +131,7 @@ const adapter: Adapter = { [CHAIN.ZORA]: { fetch: (options: FetchOptions) => fetchLogsAndCalculateFees(options, CHAIN.POLYGON), - start: 1677110400, + start: 1714506194, meta: { methodology, }, @@ -139,7 +139,7 @@ const adapter: Adapter = { [CHAIN.BOBA]: { fetch: (options: FetchOptions) => fetchLogsAndCalculateFees(options, CHAIN.BOBA), - start: 1677110400, + start: 1714506194, meta: { methodology, }, From f31ed109f4534506b7fbea81f10742cc3993e62e Mon Sep 17 00:00:00 2001 From: h0lme3 Date: Tue, 23 Jul 2024 21:28:09 -0400 Subject: [PATCH 071/105] use accurate timestamp for every chain and use try catch statement --- fees/zns/index.ts | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/fees/zns/index.ts b/fees/zns/index.ts index 3bbff18d54..1c85e6e544 100644 --- a/fees/zns/index.ts +++ b/fees/zns/index.ts @@ -60,18 +60,24 @@ const fetchLogsAndCalculateFees = async ( const contract = new ethers.Contract(address, ABI, provider); const mintedLogs = await options.getLogs({ - targets: [address], + target: address, eventAbi: abi_event.mintedDomain, }); const renewedLogs = await options.getLogs({ - targets: [address], + target: address, eventAbi: abi_event.renewedDomain, }); - for (const log of mintedLogs.concat(renewedLogs)) { - const domainPrice = await contract.priceToRegister(log.domainName.length); - dailyFees.addGasToken(domainPrice); + const logs = mintedLogs.concat(renewedLogs); + + for (const log of logs) { + try { + const domainPrice = await contract.priceToRegister(log.domainName.length); + dailyFees.addGasToken(domainPrice); + } catch { + dailyFees.addGasToken(0); + } } return { dailyFees, dailyRevenue: dailyFees }; @@ -91,7 +97,7 @@ const adapter: Adapter = { [CHAIN.SCROLL]: { fetch: (options: FetchOptions) => fetchLogsAndCalculateFees(options, CHAIN.POLYGON), - start: 1714506194, + start: 1714773760, meta: { methodology, }, @@ -99,7 +105,7 @@ const adapter: Adapter = { [CHAIN.BLAST]: { fetch: (options: FetchOptions) => fetchLogsAndCalculateFees(options, CHAIN.BOBA), - start: 1714506194, + start: 1717180581, meta: { methodology, }, @@ -107,7 +113,7 @@ const adapter: Adapter = { [CHAIN.POLYGON]: { fetch: (options: FetchOptions) => fetchLogsAndCalculateFees(options, CHAIN.POLYGON), - start: 1714506194, + start: 1717195742, meta: { methodology, }, @@ -115,7 +121,7 @@ const adapter: Adapter = { [CHAIN.TAIKO]: { fetch: (options: FetchOptions) => fetchLogsAndCalculateFees(options, CHAIN.BOBA), - start: 1714506194, + start: 1717048139, meta: { methodology, }, @@ -123,7 +129,7 @@ const adapter: Adapter = { [CHAIN.XLAYER]: { fetch: (options: FetchOptions) => fetchLogsAndCalculateFees(options, CHAIN.BSC), - start: 1714506194, + start: 1713379405, meta: { methodology, }, @@ -131,7 +137,7 @@ const adapter: Adapter = { [CHAIN.ZORA]: { fetch: (options: FetchOptions) => fetchLogsAndCalculateFees(options, CHAIN.POLYGON), - start: 1714506194, + start: 1719239283, meta: { methodology, }, @@ -139,7 +145,7 @@ const adapter: Adapter = { [CHAIN.BOBA]: { fetch: (options: FetchOptions) => fetchLogsAndCalculateFees(options, CHAIN.BOBA), - start: 1714506194, + start: 1719631449, meta: { methodology, }, From 989652d9431c1762b7c2aa564e47ca972a64d6cd Mon Sep 17 00:00:00 2001 From: "bryan.y" Date: Wed, 24 Jul 2024 10:02:30 +0800 Subject: [PATCH 072/105] fix: optimize resend request when error code --- dexs/apollox/index.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/dexs/apollox/index.ts b/dexs/apollox/index.ts index 5b326c042d..ad07efe6d2 100644 --- a/dexs/apollox/index.ts +++ b/dexs/apollox/index.ts @@ -73,9 +73,10 @@ const fetchV2Volume = async (chain: Chain) => { await sleep(sleepCount++ * 2 * 1e3) const res = ( await httpGet(v2VolumeAPI, { params: { chain, excludeCake: true } }) - ) as { data: ResponseItem[] } - if (res.data === null) { + ) as { data: ResponseItem[], success: boolean } + if (res.data === null && res.success === false) { console.log(res, v2VolumeAPI, { chain, excludeCake: true }) + return fetchV2Volume(chain) } const dailyVolume = (res.data || []).reduce((p, c) => p + +c.qutoVol, 0); From afd2d2d69ed30f7510ac7b2e88a49a141b25ea3d Mon Sep 17 00:00:00 2001 From: Ben Date: Wed, 24 Jul 2024 03:58:34 +0000 Subject: [PATCH 073/105] updated api key --- dexs/apestore/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexs/apestore/index.ts b/dexs/apestore/index.ts index 2d8f84098f..3e9e02dbbc 100644 --- a/dexs/apestore/index.ts +++ b/dexs/apestore/index.ts @@ -16,7 +16,7 @@ const adapter: Adapter = { fetch: async (options: FetchOptions): Promise => { const volumeData: VolumeInfo = await httpPost(URL, { date: options.startOfDay }, { headers: { - "Authorization": "8690be69-3c53-4bc1-8e99-e4fe0472b757" + "Authorization": "92ff54fa-80b7-4f2c-bae1-f862ea7525ae" }, }); From b211dc5ae401530e78e980dc56ac0283b8b2dd47 Mon Sep 17 00:00:00 2001 From: YFX <73627416+yfxcom@users.noreply.github.com> Date: Wed, 24 Jul 2024 15:26:46 +0800 Subject: [PATCH 074/105] add YFX V4 vol on Base --- dexs/yfx-v4/index.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/dexs/yfx-v4/index.ts b/dexs/yfx-v4/index.ts index bcfa216b98..81d8ee70b3 100644 --- a/dexs/yfx-v4/index.ts +++ b/dexs/yfx-v4/index.ts @@ -3,10 +3,11 @@ import { Fetch, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; -const chains = [CHAIN.ARBITRUM] +const chains = [CHAIN.ARBITRUM, CHAIN.BASE] const endpoints: { [key: string]: string } = { - [CHAIN.ARBITRUM]: "https://graph-v4.yfx.com/yfx_v4" + [CHAIN.ARBITRUM]: "https://graph-v4.yfx.com/yfx_v4", + [CHAIN.BASE]: "https://graph-v4.yfx.com/yfx_v4_base", } const historicalDailyData = gql` @@ -68,6 +69,7 @@ const getFetch = (chain: string): Fetch => async (timestamp: any) => { const getStartTimestamp = async (chain: string) => { const startTimestamps: { [chain: string]: number } = { [CHAIN.ARBITRUM]: 1713916800, + [CHAIN.BASE]: 1721001600, } return startTimestamps[chain] } From f0f185226ac0ecd9d989a68aa498010a72a37248 Mon Sep 17 00:00:00 2001 From: YFX <73627416+yfxcom@users.noreply.github.com> Date: Wed, 24 Jul 2024 15:27:48 +0800 Subject: [PATCH 075/105] add YFX V4 fees on Base --- fees/yfx-v4.ts | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/fees/yfx-v4.ts b/fees/yfx-v4.ts index cb7bf618a4..3edb221fc9 100644 --- a/fees/yfx-v4.ts +++ b/fees/yfx-v4.ts @@ -6,7 +6,8 @@ import { Chain } from '@defillama/sdk/build/general'; import { getTimestampAtStartOfDayUTC } from "../utils/date"; const endpoints: { [key: string]: string } = { - [CHAIN.ARBITRUM]: "https://graph-v4.yfx.com/yfx_v4" + [CHAIN.ARBITRUM]: "https://graph-v4.yfx.com/yfx_v4", + [CHAIN.BASE]: "https://graph-v4.yfx.com/yfx_v4_base", } const methodology = { @@ -31,7 +32,7 @@ const graphs = (graphUrls: ChainEndpoints) => { const poolData = gql` { poolDailyDatas(where: {dayTime: "${todaysTimestamp}"}) { - removeLiquidityFeeUSD + removeLiquidityFee } } ` @@ -47,7 +48,7 @@ const graphs = (graphUrls: ChainEndpoints) => { } for (let i in poolFees.poolDataDailyDatas) { - liquidityFee += parseFloat(poolFees.poolDataDailyDatas[i].removeLiquidityFeeUSD) + liquidityFee += parseFloat(poolFees.poolDataDailyDatas[i].removeLiquidityFee) } return { @@ -70,6 +71,13 @@ const adapter: Adapter = { methodology } }, + [CHAIN.BASE]: { + fetch: graphs(endpoints)(CHAIN.BASE), + start: async () => 1721001600, + meta: { + methodology + } + }, } } From cd63413a75cd148d8f4f2c5ced49fa5979ae3678 Mon Sep 17 00:00:00 2001 From: YFX <73627416+yfxcom@users.noreply.github.com> Date: Wed, 24 Jul 2024 15:31:33 +0800 Subject: [PATCH 076/105] Update yfx-v4.ts --- fees/yfx-v4.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fees/yfx-v4.ts b/fees/yfx-v4.ts index 3edb221fc9..94fc63fd02 100644 --- a/fees/yfx-v4.ts +++ b/fees/yfx-v4.ts @@ -32,7 +32,7 @@ const graphs = (graphUrls: ChainEndpoints) => { const poolData = gql` { poolDailyDatas(where: {dayTime: "${todaysTimestamp}"}) { - removeLiquidityFee + removeLiquidityFeeUSD } } ` @@ -48,7 +48,7 @@ const graphs = (graphUrls: ChainEndpoints) => { } for (let i in poolFees.poolDataDailyDatas) { - liquidityFee += parseFloat(poolFees.poolDataDailyDatas[i].removeLiquidityFee) + liquidityFee += parseFloat(poolFees.poolDataDailyDatas[i].removeLiquidityFeeUSD) } return { From eae7abf414b80a8a2f23fdf0f4402cd035cef5db Mon Sep 17 00:00:00 2001 From: YFX <73627416+yfxcom@users.noreply.github.com> Date: Wed, 24 Jul 2024 15:37:37 +0800 Subject: [PATCH 077/105] add User router addresses of YFX V4 --- users/routers/routerAddresses.ts | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/users/routers/routerAddresses.ts b/users/routers/routerAddresses.ts index 0eed04ee78..e3de6e6d92 100644 --- a/users/routers/routerAddresses.ts +++ b/users/routers/routerAddresses.ts @@ -4,6 +4,19 @@ import { ProtocolAddresses } from "../utils/types"; export default ( [ + { + "id":"4674", + "name":"YFX V4", + "addresses":{ + "arbitrum":[ + "0x5aCf0eBC782c9845b7E74367B14D3B867360efD2", // router + "0xA1dBE14b978541b24C4E88489b8e463094F88dEB" // rewardRouter + ], + "base": [ + "0xbb1ACaA188337Fb662aE0631B2C537f29D4F9C85", // router + ] + } + }, { id: "3429", name: "YFX", From e697c060d74fecf417ea9b7adf7f537763b294f0 Mon Sep 17 00:00:00 2001 From: Knight-101 Date: Wed, 24 Jul 2024 13:26:35 +0530 Subject: [PATCH 078/105] kriya clmm volume --- dexs/kriya-clmm/index.ts | 45 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 dexs/kriya-clmm/index.ts diff --git a/dexs/kriya-clmm/index.ts b/dexs/kriya-clmm/index.ts new file mode 100644 index 0000000000..2037be43ee --- /dev/null +++ b/dexs/kriya-clmm/index.ts @@ -0,0 +1,45 @@ +import fetchURL from "../../utils/fetchURL" +import { Chain } from "@defillama/sdk/build/general"; +import { SimpleAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; + +type IUrl = { + [s: string]: string; +} + +const url: IUrl = { + [CHAIN.SUI]: `https://tkmw8dmcp8.execute-api.ap-southeast-1.amazonaws.com/prod/volume/clmm` +} + +interface IVolume { + totalVolume: number, + dailyVolume: number, + weeklyVolume: number, + monthlyVolume: number, +} + +const fetch = (chain: Chain) => { + return async (timestamp: number) => { + const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)); + // fetch for the passed timestamp. + const volumeUrl = url[chain] + String(timestamp); + const volume: IVolume = (await fetchURL(volumeUrl)); + return { + totalVolume: `${volume?.totalVolume || undefined}`, + dailyVolume: `${volume?.dailyVolume || undefined}`, + timestamp: dayTimestamp, + }; + }; +} + +const adapter: SimpleAdapter = { + adapter: { + [CHAIN.SUI]: { + fetch: fetch(CHAIN.SUI), + start: 1683604174, + } + }, +}; + +export default adapter; \ No newline at end of file From a97fc3f2d45e292987b215c699cb978c2a4b9372 Mon Sep 17 00:00:00 2001 From: 0xpeluche <0xpeluche@protonmail.com> Date: Wed, 24 Jul 2024 10:27:37 +0200 Subject: [PATCH 079/105] feat:Add LiquidCollective dailyfees --- fees/liquid-collective/index.ts | 35 +++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 fees/liquid-collective/index.ts diff --git a/fees/liquid-collective/index.ts b/fees/liquid-collective/index.ts new file mode 100644 index 0000000000..fc5a584f13 --- /dev/null +++ b/fees/liquid-collective/index.ts @@ -0,0 +1,35 @@ +// https://docs.liquidcollective.io/v1/faqs#what-is-the-protocol-service-fee +import { Adapter, FetchOptions, FetchResultV2 } from "../../adapters/types"; +import { ETHEREUM } from "../../helpers/chains"; +import ADDRESSES from "../../helpers/coreAssets.json"; + +const lsETH = "0x8c1BEd5b9a0928467c9B1341Da1D7BD5e10b6549"; +const event = "event PulledELFees(uint256 amount)"; +const WETH = ADDRESSES.ethereum.WETH; + +const fetch = async (options: FetchOptions): Promise => { + const dailyFees = options.createBalances(); + const fees = await options.getLogs({ + target: lsETH, + eventAbi: event, + }); + + dailyFees.add(WETH, fees); + return { dailyFees }; +}; + +const adapter: Adapter = { + adapter: { + [ETHEREUM]: { + fetch, + start: 1668812400, + meta: { + methodology: + "The Liquid Collective protocol charges a service fee set at 15.0% of network rewards, split amongst Node Operators, Platforms, Wallet & Custody Providers, Service Providers, the protocol's Slashing Coverage Treasury, and the Liquid Collective DAO, which comprises a broad and dispersed community of protocol participants", + }, + }, + }, + version: 2, +}; + +export default adapter; From 2094613b81883df6b57f5bdb9158aecfd7f3969a Mon Sep 17 00:00:00 2001 From: Knight-101 Date: Wed, 24 Jul 2024 13:58:53 +0530 Subject: [PATCH 080/105] adapter version 2 --- dexs/kriya-clmm/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/dexs/kriya-clmm/index.ts b/dexs/kriya-clmm/index.ts index 2037be43ee..9547fbbf88 100644 --- a/dexs/kriya-clmm/index.ts +++ b/dexs/kriya-clmm/index.ts @@ -34,6 +34,7 @@ const fetch = (chain: Chain) => { } const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.SUI]: { fetch: fetch(CHAIN.SUI), From 495617a50bd1cd472294c6d1cbc71037f9da8a9d Mon Sep 17 00:00:00 2001 From: Knight-101 Date: Wed, 24 Jul 2024 14:00:28 +0530 Subject: [PATCH 081/105] url fix --- dexs/kriya-clmm/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexs/kriya-clmm/index.ts b/dexs/kriya-clmm/index.ts index 9547fbbf88..47cda11998 100644 --- a/dexs/kriya-clmm/index.ts +++ b/dexs/kriya-clmm/index.ts @@ -9,7 +9,7 @@ type IUrl = { } const url: IUrl = { - [CHAIN.SUI]: `https://tkmw8dmcp8.execute-api.ap-southeast-1.amazonaws.com/prod/volume/clmm` + [CHAIN.SUI]: `https://tkmw8dmcp8.execute-api.ap-southeast-1.amazonaws.com/prod/volume/clmm/` } interface IVolume { From c11d6d2d6dee132f86f2334ef9fa19c72859a9a3 Mon Sep 17 00:00:00 2001 From: Knight-101 Date: Wed, 24 Jul 2024 14:14:47 +0530 Subject: [PATCH 082/105] v2 adapter fixes --- dexs/kriya-clmm/index.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/dexs/kriya-clmm/index.ts b/dexs/kriya-clmm/index.ts index 47cda11998..f8633517e9 100644 --- a/dexs/kriya-clmm/index.ts +++ b/dexs/kriya-clmm/index.ts @@ -1,6 +1,6 @@ import fetchURL from "../../utils/fetchURL" import { Chain } from "@defillama/sdk/build/general"; -import { SimpleAdapter } from "../../adapters/types"; +import { FetchResultV2, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume"; @@ -20,10 +20,10 @@ interface IVolume { } const fetch = (chain: Chain) => { - return async (timestamp: number) => { - const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)); + return async ({ endTimestamp }): Promise => { + const dayTimestamp = getUniqStartOfTodayTimestamp(new Date(endTimestamp * 1000)); // fetch for the passed timestamp. - const volumeUrl = url[chain] + String(timestamp); + const volumeUrl = url[chain] + String(endTimestamp); const volume: IVolume = (await fetchURL(volumeUrl)); return { totalVolume: `${volume?.totalVolume || undefined}`, From c58813f5bb780a3bd781ee102b6ff47150f001c2 Mon Sep 17 00:00:00 2001 From: momo Date: Wed, 24 Jul 2024 17:45:34 +0900 Subject: [PATCH 083/105] update endpoint --- fees/extra/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fees/extra/index.ts b/fees/extra/index.ts index bf41605ec3..2a24c9a85a 100644 --- a/fees/extra/index.ts +++ b/fees/extra/index.ts @@ -7,8 +7,8 @@ type TEndpoint = { [s: CHAIN | string]: string; } const endpoints: TEndpoint = { - [CHAIN.OPTIMISM]: `https://api.thegraph.com/subgraphs/name/extrafi/extrasubgraph`, - [CHAIN.BASE]: `https://api.thegraph.com/subgraphs/name/extrafi/extrafionbase` + [CHAIN.OPTIMISM]: `https://gateway-arbitrum.network.thegraph.com/api/a4998f968b8ad324eb3e47ed20c00220/subgraphs/id/3Htp5TKs6BHCcwAYRCoBD6R4X62ThLRv2JiBBikyYze`, + [CHAIN.BASE]: `https://api.studio.thegraph.com/query/46015/extrafionbase/version/latest` } interface IFeePaid { From 2c14ffa754d0f97e7a0a19473389ed2a6f4d2e8e Mon Sep 17 00:00:00 2001 From: 0xpeluche <0xpeluche@protonmail.com> Date: Wed, 24 Jul 2024 12:51:29 +0200 Subject: [PATCH 084/105] feat: Add Juice-finance dailyFees based on depositFeeTaken on each vault --- fees/juice-finance/index.ts | 86 +++++++++++++++++++++++++++++++++++++ helpers/chains.ts | 14 +++--- 2 files changed, 93 insertions(+), 7 deletions(-) create mode 100644 fees/juice-finance/index.ts diff --git a/fees/juice-finance/index.ts b/fees/juice-finance/index.ts new file mode 100644 index 0000000000..7fb182537f --- /dev/null +++ b/fees/juice-finance/index.ts @@ -0,0 +1,86 @@ +// https://juice-finance.gitbook.io/juice-finance/juice-protocol/fees#protocol-fees +import { Adapter, FetchOptions, FetchResultV2 } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import ADDRESSES from "../../helpers/coreAssets.json"; + +const event = "event DepositFeeTaken(uint256 amount)"; +const WETH = ADDRESSES.blast.WETH; +const USDB = ADDRESSES.blast.USDB; + +const WETH_WETH_stategies: string[] = [ + "0x78E6265a11a41E5Dcd1431448d00f3524943fD11", + "0x3FeC7f626923445F587C4881a80D00a7104782d1", + "0x6F3Bc2f9034C151326A80F5ca1Ee0F1eA1E6f002", + "0xEA42f500A92E4CAa02b2F10E323EadEE1F00fbF7", + "0x40214EDef589149b9cebb7BE7025197d885D6CB1", + "0x9Dfd4094b3e88f3b9E79b04514B1669D6779AeC9", + "0x741011f52B7499ca951f8b8Ee547DD3Cdd813Fda", + "0x576314F851732b208d807260FE19FeC7Dba3E40C", + "0x15e44C3f3F9B34fC49cc15A18a597bf80F144bC9", + "0x98546CdD046219b25B2E617A55563A5e4a3b9Adc", + "0x3e1B017D21ad613c58F8eE2f78987b3c9F14f643", + "0xC2eB02621e74E294B73B9fab0A94081393F31978", +]; + +const WETH_USDB_stategies: string[] = [ + "0xbc0b332d88DCF65a4CD6905eF939213f485FE1A3", + "0xc1B1aE2502D2cDEF4772FB4A4a6fcBf4fd9c1b80", + "0x542A672B1DEa78EFd83B9D7D8CAe76cEa59964a1", + "0x8034b01555487C26D4e21F4E33b7A30fbc90d181", + "0x4A355D57fc1A5eEB33C0a19539744A2144220027", + "0x0CA56aa647E83A8F0a5f7a81a2fdcA393bC68D78", + "0xfEc64ae675CC4B1AacF8F9C0ABeaD585c5496382", + "0x72E4ce9b7cC5d9C017F64ad58e512C253a11d30a", +]; + +const USDB_USDB_stategies: string[] = [ + "0xbc0b332d88DCF65a4CD6905eF939213f485FE1A3", + "0xc1B1aE2502D2cDEF4772FB4A4a6fcBf4fd9c1b80", + "0xd04c891876675f8c02160ee33466315ac13afc38", + "0x542A672B1DEa78EFd83B9D7D8CAe76cEa59964a1", + "0x0CA56aa647E83A8F0a5f7a81a2fdcA393bC68D78", +]; + +const getAndSumFees = async ( + options: FetchOptions, + targets: string[], + event: string +) => { + const logsFees = await options.getLogs({ + targets, + eventAbi: event, + flatten: true, + }); + return logsFees.reduce((acc, fee) => acc + Number(fee), 0); +}; + +const fetch = async (options: FetchOptions): Promise => { + const dailyFees = options.createBalances(); + + const [wethwethFees, wethusdbFees, usdbusdbFees] = await Promise.all([ + getAndSumFees(options, WETH_WETH_stategies, event), + getAndSumFees(options, WETH_USDB_stategies, event), + getAndSumFees(options, USDB_USDB_stategies, event), + ]); + + dailyFees.add(WETH, wethwethFees); + dailyFees.add(USDB, wethusdbFees + usdbusdbFees); + + return { dailyFees, dailyRevenue: dailyFees }; +}; + +const adapter: Adapter = { + adapter: { + [CHAIN.BLAST]: { + fetch, + start: 1713218400, + meta: { + methodology: + "Applied to strategies at the team's discretion and always noted on the vault page. It is charged upon entering the strategy, typically ranging from 0.5% to 2%.", + }, + }, + }, + version: 2, +}; + +export default adapter; diff --git a/helpers/chains.ts b/helpers/chains.ts index e930ab326d..dcfba151ee 100644 --- a/helpers/chains.ts +++ b/helpers/chains.ts @@ -185,25 +185,25 @@ const ZKSYNC = "zksync"; const MANTLE = "mantle"; // Don't use export { - ZKSYNC, ARBITRUM, + AURORA, AVAX, + BITCOIN, BOBA, BSC, CELO, + DOGE, ETHEREUM, FANTOM, HARMONY, HECO, + LITECOIN, + MANTLE, + MOONRIVER, OKEXCHAIN, OPTIMISM, POLYGON, RONIN, XDAI, - AURORA, - MOONRIVER, - BITCOIN, - LITECOIN, - DOGE, - MANTLE + ZKSYNC, }; From 3ed7f82606cdc40ac167af773722b660667007e5 Mon Sep 17 00:00:00 2001 From: 0xpeluche <0xpeluche@protonmail.com> Date: Wed, 24 Jul 2024 13:23:13 +0200 Subject: [PATCH 085/105] fix timestamp --- fees/juice-finance/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fees/juice-finance/index.ts b/fees/juice-finance/index.ts index 7fb182537f..77fe024a79 100644 --- a/fees/juice-finance/index.ts +++ b/fees/juice-finance/index.ts @@ -73,7 +73,7 @@ const adapter: Adapter = { adapter: { [CHAIN.BLAST]: { fetch, - start: 1713218400, + start: 1709247600, meta: { methodology: "Applied to strategies at the team's discretion and always noted on the vault page. It is charged upon entering the strategy, typically ranging from 0.5% to 2%.", From 0094c83868544a8cf27b04a6c67866ee738d9122 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Wed, 24 Jul 2024 14:40:49 +0300 Subject: [PATCH 086/105] fix vooi --- aggregator-derivatives/vooi/index.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/aggregator-derivatives/vooi/index.ts b/aggregator-derivatives/vooi/index.ts index ac81af4297..ae4a8e5cb6 100644 --- a/aggregator-derivatives/vooi/index.ts +++ b/aggregator-derivatives/vooi/index.ts @@ -1,5 +1,5 @@ import fetchURL from "../../utils/fetchURL"; -import { FetchResult, FetchResultV2, SimpleAdapter } from "../../adapters/types"; +import { FetchResult } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; const URL = "https://defilama-stats.vooi.workers.dev/"; @@ -11,12 +11,12 @@ interface IAPIResponse { dailyVolume: string; totalVolume: string; } -const fetch = async (options: any): Promise => { - let timestamp = options.toTimestamp +const fetch = async (timestamp: number): Promise => { const { dailyVolume, totalVolume }: IAPIResponse = ( (await fetchURL(`${URL}${endpoint}?ts=${timestamp}`)).data ); return { + timestamp, dailyVolume, totalVolume, }; @@ -29,5 +29,5 @@ export default { start: startTimestamp }, }, - version: 2 + // version: 2 // data accepts only one input to timestamp } From 23cc29443a66b6d4fc63388221083c9d3681b527 Mon Sep 17 00:00:00 2001 From: h0lme3 Date: Wed, 24 Jul 2024 08:08:52 -0400 Subject: [PATCH 087/105] fix wrong chain assign --- fees/zns/index.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/fees/zns/index.ts b/fees/zns/index.ts index 1c85e6e544..f31cdf808f 100644 --- a/fees/zns/index.ts +++ b/fees/zns/index.ts @@ -96,7 +96,7 @@ const adapter: Adapter = { }, [CHAIN.SCROLL]: { fetch: (options: FetchOptions) => - fetchLogsAndCalculateFees(options, CHAIN.POLYGON), + fetchLogsAndCalculateFees(options, CHAIN.SCROLL), start: 1714773760, meta: { methodology, @@ -104,7 +104,7 @@ const adapter: Adapter = { }, [CHAIN.BLAST]: { fetch: (options: FetchOptions) => - fetchLogsAndCalculateFees(options, CHAIN.BOBA), + fetchLogsAndCalculateFees(options, CHAIN.BLAST), start: 1717180581, meta: { methodology, @@ -120,7 +120,7 @@ const adapter: Adapter = { }, [CHAIN.TAIKO]: { fetch: (options: FetchOptions) => - fetchLogsAndCalculateFees(options, CHAIN.BOBA), + fetchLogsAndCalculateFees(options, CHAIN.TAIKO), start: 1717048139, meta: { methodology, @@ -128,7 +128,7 @@ const adapter: Adapter = { }, [CHAIN.XLAYER]: { fetch: (options: FetchOptions) => - fetchLogsAndCalculateFees(options, CHAIN.BSC), + fetchLogsAndCalculateFees(options, CHAIN.XLAYER), start: 1713379405, meta: { methodology, @@ -136,7 +136,7 @@ const adapter: Adapter = { }, [CHAIN.ZORA]: { fetch: (options: FetchOptions) => - fetchLogsAndCalculateFees(options, CHAIN.POLYGON), + fetchLogsAndCalculateFees(options, CHAIN.ZORA), start: 1719239283, meta: { methodology, From df01d871b3c80f9499d9ce7fe86fc2917af57859 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 24 Jul 2024 14:34:56 +0000 Subject: [PATCH 088/105] fix woofi --- dexs/woofi/index.ts | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/dexs/woofi/index.ts b/dexs/woofi/index.ts index 615283d2de..3af651b47a 100644 --- a/dexs/woofi/index.ts +++ b/dexs/woofi/index.ts @@ -1,9 +1,9 @@ import * as sdk from "@defillama/sdk"; import { Chain } from "@defillama/sdk/build/general"; -import { ChainBlocks, SimpleAdapter } from "../../adapters/types"; +import { FetchOptions, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; +import { getChainVolume } from "../../helpers/getUniSubgraphVolume"; -const { getChainVolume } = require("../../helpers/getUniSubgraphVolume"); const endpoints = { [CHAIN.AVAX]: sdk.graph.modifyEndpoint('BL45YVVLVkCRGaAtyTjvuRt1yHnUt4QbZg8bWcZtLvLm'), @@ -55,15 +55,18 @@ const graphs = getChainVolume({ }, }); -const fetch = (chain: string) => { - return async (timestamp: number, chainBlocks: ChainBlocks) => { - const result = await graphs(chain)(timestamp, chainBlocks); +const fetch = async (options: FetchOptions) => { + try { + const result = await graphs(options.chain)(options); if (!result) return {}; return { ...result, - totalVolume: `${result.totalVolume / 10 ** 18}`, - dailyVolume: `${result.dailyVolume / 10 ** 18}` + totalVolume: `${(result?.totalVolume || 0) / 10 ** 18}`, + dailyVolume: `${(result?.dailyVolume || 0) / 10 ** 18}` }; + } catch (error) { + console.error(error); + return {}; } } @@ -71,7 +74,7 @@ const volume = Object.keys(endpoints).reduce( (acc, chain) => ({ ...acc, [chain]: { - fetch: fetch(chain), + fetch: fetch, start: startTime[chain], }, }), From 6cf09727383da3dd40d07681706e78dbf1398284 Mon Sep 17 00:00:00 2001 From: 0xpeluche <0xpeluche@protonmail.com> Date: Wed, 24 Jul 2024 16:38:22 +0200 Subject: [PATCH 089/105] feat:Add Origin-Dollar fees & revenues --- fees/origin-dollar/index.ts | 64 +++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 fees/origin-dollar/index.ts diff --git a/fees/origin-dollar/index.ts b/fees/origin-dollar/index.ts new file mode 100644 index 0000000000..ec0dc70a32 --- /dev/null +++ b/fees/origin-dollar/index.ts @@ -0,0 +1,64 @@ +// https://docs.originprotocol.com/ogn/staking#staking-rewards +import axios from "axios"; +import { Adapter, FetchOptions, FetchResultV2 } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import ADDRESSES from "../../helpers/coreAssets.json"; + +const apiUrl: string = "https://api.originprotocol.com/api/v2/protocol-fees"; +const USDT: string = ADDRESSES.ethereum.USDT; +const decimals: number = 1e6; + +interface DayData { + date: number; + revenue: number; +} + +interface ApiResponse { + revenue: { + now: number; + oneDayAgo: number; + twoDaysAgo: number; + oneWeekAgo: number; + twoWeeksAgo: number; + thirtyDaysAgo: number; + sixtyDaysAgo: number; + ninetyDaysAgo: number; + }; + days: DayData[]; +} + +const fetch = async (options: FetchOptions): Promise => { + const { startOfDay, createBalances } = options; + const dailyRevenue = createBalances(); + const totalRevenue = createBalances(); + + const { data } = await axios.get(apiUrl); + + const dailyData = data.days.find((day) => day.date === startOfDay); + if (dailyData) dailyRevenue.add(USDT, dailyData.revenue * decimals); + totalRevenue.add(USDT, data.revenue.now * decimals); + + return { + dailyRevenue, + dailyFees: dailyRevenue, + totalRevenue, + totalFees: totalRevenue, + }; +}; + +const adapter: Adapter = { + adapter: { + [CHAIN.ETHEREUM]: { + fetch, + start: 1635811200, + runAtCurrTime: false, + meta: { + methodology: + "20% of all yield generated by OUSD and OETH is collected as a protocol fee.", + }, + }, + }, + version: 2, +}; + +export default adapter; From 13ab94195b0ce116c557f5aeaaad97ebe69acdd5 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 24 Jul 2024 15:36:39 +0000 Subject: [PATCH 090/105] allow run --- dexs/dedust/index.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/dexs/dedust/index.ts b/dexs/dedust/index.ts index 6b99b3f44d..60b107d34f 100644 --- a/dexs/dedust/index.ts +++ b/dexs/dedust/index.ts @@ -78,7 +78,6 @@ const adapter: SimpleAdapter = { adapter: { [CHAIN.TON]: { fetch, - runAtCurrTime: true, start: 1681931480, }, }, From a40c7c2c82833a8f212c108aa445102441a35898 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 24 Jul 2024 17:34:30 +0000 Subject: [PATCH 091/105] fix zns --- fees/zns/index.ts | 108 +++++++++++++++++++++++++--------------------- 1 file changed, 60 insertions(+), 48 deletions(-) diff --git a/fees/zns/index.ts b/fees/zns/index.ts index f31cdf808f..f9b5a35504 100644 --- a/fees/zns/index.ts +++ b/fees/zns/index.ts @@ -1,6 +1,4 @@ -import { ethers } from "ethers"; import type { Balances } from "@defillama/sdk"; - import { Adapter, FetchOptions } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; @@ -11,7 +9,10 @@ const abi_event = { "event RenewedDomain(uint256 indexed tokenId, uint256 expiry, string domainName)", }; -const addresses = { +type TAddress = { + [s: string]: string; +}; +const addresses: TAddress = { [CHAIN.BSC]: "0x7e2cf06f092c9f5cf5972ef021635b6c8e1c5bb2", [CHAIN.SCROLL]: "0xB00910Bac7DA44c0D440798809dbF8d51FDBb635", [CHAIN.BLAST]: "0x59B9Ac688e39A14b938AC8C3269db66D8aDB9aF6", @@ -22,43 +23,34 @@ const addresses = { [CHAIN.BOBA]: "0xf1D09DA87c50820eD3b924aFf3C37058eD6eA40e", }; -const rpcUrls = { - [CHAIN.BSC]: "https://binance.llamarpc.com", - [CHAIN.SCROLL]: "https://1rpc.io/scroll", - [CHAIN.BLAST]: "https://blast-rpc.publicnode.com", - [CHAIN.POLYGON]: "https://polygon.llamarpc.com", - [CHAIN.TAIKO]: "https://rpc.ankr.com/taiko", - [CHAIN.XLAYER]: "https://endpoints.omniatech.io/v1/xlayer/mainnet/public", - [CHAIN.ZORA]: "https://rpc.zora.energy", - [CHAIN.BOBA]: "https://mainnet.boba.network/", -}; - const methodology = { Fees: "registration and renew cost", Revenue: "registration and renew cost", }; -const ABI = [ - { +const ABI = { + priceToRegister: { inputs: [{ internalType: "uint16", name: "len", type: "uint16" }], name: "priceToRegister", outputs: [{ internalType: "uint256", name: "", type: "uint256" }], stateMutability: "view", type: "function", }, -]; + priceToRenew: { + inputs: [{ internalType: "uint16", name: "len", type: "uint16" }], + name: "priceToRenew", + outputs: [{ internalType: "uint256", name: "", type: "uint256" }], + stateMutability: "view", + type: "function", + }, +} const fetchLogsAndCalculateFees = async ( options: FetchOptions, - chain: string ): Promise<{ dailyFees: Balances; dailyRevenue: Balances }> => { - const address = addresses[chain]; + const address = addresses[options.chain]; const dailyFees = options.createBalances(); - const rpcUrl = rpcUrls[chain]; - const provider = new ethers.JsonRpcProvider(rpcUrl); - const contract = new ethers.Contract(address, ABI, provider); - const mintedLogs = await options.getLogs({ target: address, eventAbi: abi_event.mintedDomain, @@ -68,17 +60,45 @@ const fetchLogsAndCalculateFees = async ( target: address, eventAbi: abi_event.renewedDomain, }); + const lens = [1,2,3,4,5] + + const znsPriceRegistor = await options.api.multiCall({ + abi: ABI.priceToRegister, + calls: lens.map(len=>({ + params: [len], + target: address + })) + }); - const logs = mintedLogs.concat(renewedLogs); + const znsPriceRenew = await options.api.multiCall({ + abi: ABI.priceToRenew, + calls: lens.map(len=>({ + params: [len], + target: address + })), + }); + + mintedLogs.forEach((log) => { + const domainName = log.domainName; + let domainPrice = 0; + if (domainName.length === 1) domainPrice = znsPriceRegistor[0]; + else if (domainName.length === 2) domainPrice = znsPriceRegistor[1]; + else if (domainName.length === 3) domainPrice = znsPriceRegistor[2]; + else if (domainName.length === 4) domainPrice = znsPriceRegistor[3]; + else domainPrice = znsPriceRegistor[4]; + dailyFees.addGasToken(domainPrice); + }); - for (const log of logs) { - try { - const domainPrice = await contract.priceToRegister(log.domainName.length); - dailyFees.addGasToken(domainPrice); - } catch { - dailyFees.addGasToken(0); - } - } + renewedLogs.forEach((log) => { + const domainName = log.domainName; + let domainPrice = 0; + if (domainName.length === 1) domainPrice = znsPriceRenew[0]; + else if (domainName.length === 2) domainPrice = znsPriceRenew[1]; + else if (domainName.length === 3) domainPrice = znsPriceRenew[2]; + else if (domainName.length === 4) domainPrice = znsPriceRenew[3]; + else domainPrice = znsPriceRenew[4]; + dailyFees.addGasToken(domainPrice); + }); return { dailyFees, dailyRevenue: dailyFees }; }; @@ -87,64 +107,56 @@ const adapter: Adapter = { version: 2, adapter: { [CHAIN.BSC]: { - fetch: (options: FetchOptions) => - fetchLogsAndCalculateFees(options, CHAIN.BSC), + fetch: fetchLogsAndCalculateFees, start: 1714506194, meta: { methodology, }, }, [CHAIN.SCROLL]: { - fetch: (options: FetchOptions) => - fetchLogsAndCalculateFees(options, CHAIN.SCROLL), + fetch: fetchLogsAndCalculateFees, start: 1714773760, meta: { methodology, }, }, [CHAIN.BLAST]: { - fetch: (options: FetchOptions) => - fetchLogsAndCalculateFees(options, CHAIN.BLAST), + fetch: fetchLogsAndCalculateFees, start: 1717180581, meta: { methodology, }, }, [CHAIN.POLYGON]: { - fetch: (options: FetchOptions) => - fetchLogsAndCalculateFees(options, CHAIN.POLYGON), + fetch: fetchLogsAndCalculateFees, start: 1717195742, meta: { methodology, }, }, [CHAIN.TAIKO]: { - fetch: (options: FetchOptions) => - fetchLogsAndCalculateFees(options, CHAIN.TAIKO), + fetch: fetchLogsAndCalculateFees, start: 1717048139, meta: { methodology, }, }, [CHAIN.XLAYER]: { - fetch: (options: FetchOptions) => - fetchLogsAndCalculateFees(options, CHAIN.XLAYER), + fetch: fetchLogsAndCalculateFees, start: 1713379405, meta: { methodology, }, }, [CHAIN.ZORA]: { - fetch: (options: FetchOptions) => - fetchLogsAndCalculateFees(options, CHAIN.ZORA), + fetch: fetchLogsAndCalculateFees, start: 1719239283, meta: { methodology, }, }, [CHAIN.BOBA]: { - fetch: (options: FetchOptions) => - fetchLogsAndCalculateFees(options, CHAIN.BOBA), + fetch: fetchLogsAndCalculateFees, start: 1719631449, meta: { methodology, From 882ea672b367b27fd04d2dbb12009fcd42168f98 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 24 Jul 2024 17:47:40 +0000 Subject: [PATCH 092/105] fix event --- fees/zns/index.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/fees/zns/index.ts b/fees/zns/index.ts index f9b5a35504..be0a9e1628 100644 --- a/fees/zns/index.ts +++ b/fees/zns/index.ts @@ -3,10 +3,8 @@ import { Adapter, FetchOptions } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; const abi_event = { - mintedDomain: - "event MintedDomain(string domainName, uint256 indexed tokenId, address indexed owner, uint256 expiry)", - renewedDomain: - "event RenewedDomain(uint256 indexed tokenId, uint256 expiry, string domainName)", + mintedDomain: "event MintedDomain(string domainName,uint256 indexed tokenId,address indexed owner,uint256 indexed expiry)", + renewedDomain: "event RenewedDomain(uint256 indexed tokenId,uint256 indexed expiry,string domainName)", }; type TAddress = { From 7d691e1a86cdcde8b88fda8980b14e7ec4985c25 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Wed, 24 Jul 2024 17:59:53 +0000 Subject: [PATCH 093/105] fix raydium filter tvl before sum --- dexs/raydium/index.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dexs/raydium/index.ts b/dexs/raydium/index.ts index 1ec4f36891..b3e893f70a 100644 --- a/dexs/raydium/index.ts +++ b/dexs/raydium/index.ts @@ -8,12 +8,13 @@ const graphs = async (timestamp: number): Promise Number(i.tvl) > 100_000) .reduce((a: number, b) => a + b.day.volume, 0) let ammFee = 0 let clmmFee = 0 let cpmmFee = 0 - for (const item of ammPoolStandard) { + for (const item of ammPoolStandard.filter((i: any) => Number(i.tvl) > 100_000)){ if (item.programId === 'CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK') clmmFee += item.day.volumeFee else if (item.programId === 'CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C') cpmmFee += item.day.volumeFee else ammFee += item.day.volumeFee From a4738b5454068169646016dc1b78ed91f80aa91a Mon Sep 17 00:00:00 2001 From: "Bladeswap.xyz" <160004157+Bladeswap@users.noreply.github.com> Date: Thu, 25 Jul 2024 15:27:40 +0900 Subject: [PATCH 094/105] Update Bladeswap graphql endpoint --- dexs/bladeswap/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexs/bladeswap/index.ts b/dexs/bladeswap/index.ts index d3cdaca01f..f3d0f54b38 100644 --- a/dexs/bladeswap/index.ts +++ b/dexs/bladeswap/index.ts @@ -4,7 +4,7 @@ import { FetchOptions, BreakdownAdapter } from "../../adapters/types"; const adapters = univ2Adapter( { [CHAIN.BLAST]: - "https://graph-node.bladeswap.xyz/subgraphs/name/bladeswap/algebra-mainnet-info", + "https://api.studio.thegraph.com/query/75205/blade-algebra/mainnet-info-1.0.3", }, { factoriesName: "factories", From e042f4d904a219947c1559f24671b27aefaaacb2 Mon Sep 17 00:00:00 2001 From: 0xpeluche <0xpeluche@protonmail.com> Date: Thu, 25 Jul 2024 10:45:19 +0200 Subject: [PATCH 095/105] Update Stargate v1 (missed chains/addresses) --- fees/stargate.ts | 179 ++++++++++++++++++++++++++++++++++++----------- 1 file changed, 137 insertions(+), 42 deletions(-) diff --git a/fees/stargate.ts b/fees/stargate.ts index 02ee411e13..fe6685da78 100644 --- a/fees/stargate.ts +++ b/fees/stargate.ts @@ -1,68 +1,143 @@ -import ADDRESSES from '../helpers/coreAssets.json' -import { Adapter, ChainBlocks, FetchOptions, FetchResultFees } from "../adapters/types"; -import { CHAIN } from "../helpers/chains"; import { Chain } from "@defillama/sdk/build/general"; +import { + Adapter, + ChainBlocks, + FetchOptions, + FetchResultFees, +} from "../adapters/types"; +import { CHAIN } from "../helpers/chains"; +import ADDRESSES from "../helpers/coreAssets.json"; -const event0_swap = 'event Swap(uint16 chainId,uint256 dstPoolId,address from,uint256 amountSD,uint256 eqReward,uint256 eqFee,uint256 protocolFee,uint256 lpFee)' -const event0_swap_remote = 'event SwapRemote( address to,uint256 amountSD,uint256 protocolFee,uint256 dstFee)' +const event0_swap = + "event Swap(uint16 chainId,uint256 dstPoolId,address from,uint256 amountSD,uint256 eqReward,uint256 eqFee,uint256 protocolFee,uint256 lpFee)"; +const event0_swap_remote = + "event SwapRemote( address to,uint256 amountSD,uint256 protocolFee,uint256 dstFee)"; type IAddress = { [s: string | Chain]: string[]; -} +}; const contract_address: IAddress = { [CHAIN.ETHEREUM]: [ - '0xdf0770dF86a8034b3EFEf0A1Bb3c889B8332FF56', - '0x38EA452219524Bb87e18dE1C24D3bB59510BD783', - '0x101816545F6bd2b1076434B54383a1E633390A2E', + "0x101816545f6bd2b1076434b54383a1e633390a2e", + "0x101816545F6bd2b1076434B54383a1E633390A2E", + "0xdf0770dF86a8034b3EFEf0A1Bb3c889B8332FF56", + "0x38ea452219524bb87e18de1c24d3bb59510bd783", + "0x692953e758c3669290cb1677180c64183cEe374e", + "0x0Faf1d2d3CED330824de3B8200fc8dc6E397850d", + "0xfA0F307783AC21C39E939ACFF795e27b650F6e68", + "0x590d4f8A68583639f215f675F3a259Ed84790580", + "0xE8F55368C82D38bbbbDb5533e7F56AfC2E978CC2", + "0x9cef9a0b1be0d289ac9f4a98ff317c33eaa84eb8", + "0xd8772edBF88bBa2667ed011542343b0eDDaCDa47", + "0x430Ebff5E3E80A6C58E7e6ADA1d90F5c28AA116d", + "0xa572d137666dcbadfa47c3fc41f15e90134c618c", ], [CHAIN.ARBITRUM]: [ - '0x892785f33CdeE22A30AEF750F285E18c18040c3e', - '0xB6CfcF89a7B22988bfC96632aC2A9D6daB60d641', - '0x915A55e36A01285A14f05dE6e81ED9cE89772f8e', + "0x915A55e36A01285A14f05dE6e81ED9cE89772f8e", + "0x892785f33CdeE22A30AEF750F285E18c18040c3e", + "0xB6CfcF89a7B22988bfC96632aC2A9D6daB60d641", + "0xaa4BF442F024820B2C28Cd0FD72b82c63e66F56C", + "0xF39B7Be294cB36dE8c510e267B82bb588705d977", + "0x600E576F9d853c95d58029093A16EE49646F3ca5", ], [CHAIN.AVAX]: [ - '0x1205f31718499dBf1fCa446663B532Ef87481fe1', - '0x29e38769f23701A2e4A8Ef0492e19dA4604Be62c', + "0x1205f31718499dBf1fCa446663B532Ef87481fe1", + "0x29e38769f23701A2e4A8Ef0492e19dA4604Be62c", + "0x1c272232Df0bb6225dA87f4dEcD9d37c32f63Eea", + "0x8736f92646B2542B3e5F3c63590cA7Fe313e283B", + "0xEAe5c2F6B25933deB62f754f239111413A0A25ef", ], [CHAIN.BSC]: [ - '0x9aA83081AA06AF7208Dcc7A4cB72C94d057D2cda', - '0x98a5737749490856b401DB5Dc27F522fC314A4e1', - ], - [CHAIN.FANTOM]: [ - '0x12edeA9cd262006cC3C4E77c90d2CD2DD4b1eb97' + "0x9aA83081AA06AF7208Dcc7A4cB72C94d057D2cda", + "0x98a5737749490856b401DB5Dc27F522fC314A4e1", + "0x4e145a589e4c03cBe3d28520e4BF3089834289Df", + "0x7BfD7f2498C4796f10b6C611D9db393D3052510C", + "0x68C6c27fB0e02285829e69240BE16f32C5f8bEFe", ], + [CHAIN.FANTOM]: ["0x12edeA9cd262006cC3C4E77c90d2CD2DD4b1eb97"], [CHAIN.OPTIMISM]: [ - '0xDecC0c09c3B5f6e92EF4184125D5648a66E35298', - '0xd22363e3762cA7339569F3d33EADe20127D5F98C', + "0xd22363e3762cA7339569F3d33EADe20127D5F98C", + "0x165137624F1f692e69659f944BF69DE02874ee27", + "0x368605D9C6243A80903b9e326f1Cddde088B8924", + "0x2F8bC9081c7FCFeC25b9f41a50d97EaA592058ae", + "0x3533F5e279bDBf550272a199a223dA798D9eff78", + "0x5421FA1A48f9FF81e4580557E86C7C0D24C18036", ], [CHAIN.POLYGON]: [ - '0x1205f31718499dBf1fCa446663B532Ef87481fe1', - '0x29e38769f23701A2e4A8Ef0492e19dA4604Be62c', - ] -} + "0x1205f31718499dBf1fCa446663B532Ef87481fe1", + "0x29e38769f23701A2e4A8Ef0492e19dA4604Be62c", + "0x1c272232Df0bb6225dA87f4dEcD9d37c32f63Eea", + "0x8736f92646B2542B3e5F3c63590cA7Fe313e283B", + ], + [CHAIN.METIS]: [ + "0xAad094F6A75A14417d39f04E690fC216f080A41a", + "0x2b60473a7C41Deb80EDdaafD5560e963440eb632", + ], + [CHAIN.BASE]: [ + "0x28fc411f9e1c480AD312b3d9C60c22b965015c6B", + "0x4c80e24119cfb836cdf0a6b53dc23f04f7e652ca", + ], + [CHAIN.LINEA]: ["0xAad094F6A75A14417d39f04E690fC216f080A41a"], + [CHAIN.KAVA]: ["0xAad094F6A75A14417d39f04E690fC216f080A41a"], + [CHAIN.MANTLE]: [ + "0xAad094F6A75A14417d39f04E690fC216f080A41a", + "0x2b60473a7C41Deb80EDdaafD5560e963440eb632", + "0xf52b354FFDB323E0667E87a0136040e3e4D9dF33", + ], +}; type IMap = { [s: string]: string; -} +}; const mapTokenPrice: IMap = { - ['0x101816545f6bd2b1076434b54383a1e633390a2e'.toLowerCase()]: ADDRESSES.null, - ['0x915a55e36a01285a14f05de6e81ed9ce89772f8e'.toLowerCase()]: ADDRESSES.null, - ['0xd22363e3762ca7339569f3d33eade20127d5f98c'.toLowerCase()]: ADDRESSES.null, -} + ["0x101816545f6bd2b1076434b54383a1e633390a2e".toLowerCase()]: ADDRESSES.null, + ["0xa572d137666dcbadfa47c3fc41f15e90134c618c".toLowerCase()]: ADDRESSES.null, + ["0x915a55e36a01285a14f05de6e81ed9ce89772f8e".toLowerCase()]: ADDRESSES.null, + ["0xd22363e3762ca7339569f3d33eade20127d5f98c".toLowerCase()]: ADDRESSES.null, + ["0x28fc411f9e1c480AD312b3d9C60c22b965015c6B".toLowerCase()]: ADDRESSES.null, + ["0xAad094F6A75A14417d39f04E690fC216f080A41a".toLowerCase()]: ADDRESSES.null, + ["0xf52b354FFDB323E0667E87a0136040e3e4D9dF33".toLowerCase()]: ADDRESSES.null, +}; const fetch = (chain: Chain) => { - return async (timestamp: number, _: ChainBlocks, { createBalances, getLogs }: FetchOptions): Promise => { - const dailyFees = createBalances() - const transform = (a: string) => mapTokenPrice[a.toLowerCase()] ?? a - const logs = await getLogs({ targets: contract_address[chain], eventAbi: event0_swap, flatten: false, }) - const logs_swap_remote = await getLogs({ targets: contract_address[chain], eventAbi: event0_swap_remote, flatten: false }) - logs.forEach((_: any, index: number) => _.forEach((log: any) => dailyFees.add(transform(contract_address[chain][index]), log.protocolFee))) - logs_swap_remote.forEach((_: any, index: number) => _.forEach((log: any) => dailyFees.add(transform(contract_address[chain][index]), log.protocolFee))) - return { dailyFees, dailyRevenue: dailyFees, timestamp, } - } -} + return async ( + timestamp: number, + _: ChainBlocks, + { createBalances, getLogs }: FetchOptions + ): Promise => { + const dailyFees = createBalances(); + const transform = (a: string) => mapTokenPrice[a.toLowerCase()] ?? a; + const logs = await getLogs({ + targets: contract_address[chain], + eventAbi: event0_swap, + flatten: false, + }); + const logs_swap_remote = await getLogs({ + targets: contract_address[chain], + eventAbi: event0_swap_remote, + flatten: false, + }); + logs.forEach((_: any, index: number) => + _.forEach((log: any) => + dailyFees.add( + transform(contract_address[chain][index]), + log.protocolFee + ) + ) + ); + logs_swap_remote.forEach((_: any, index: number) => + _.forEach((log: any) => + dailyFees.add( + transform(contract_address[chain][index]), + log.protocolFee + ) + ) + ); + return { dailyFees, dailyRevenue: dailyFees, timestamp }; + }; +}; const adapter: Adapter = { adapter: { @@ -94,7 +169,27 @@ const adapter: Adapter = { fetch: fetch(CHAIN.POLYGON), start: 1661990400, }, - } -} + [CHAIN.METIS]: { + fetch: fetch(CHAIN.METIS), + start: 1661990400, + }, + [CHAIN.BASE]: { + fetch: fetch(CHAIN.BASE), + start: 1661990400, + }, + [CHAIN.LINEA]: { + fetch: fetch(CHAIN.LINEA), + start: 1661990400, + }, + [CHAIN.MANTLE]: { + fetch: fetch(CHAIN.MANTLE), + start: 1661990400, + }, + [CHAIN.KAVA]: { + fetch: fetch(CHAIN.KAVA), + start: 1661990400, + }, + }, +}; export default adapter; From bbb3e582efbcd7c7bf117554669a759e6b58ed9f Mon Sep 17 00:00:00 2001 From: 0xpeluche <0xpeluche@protonmail.com> Date: Thu, 25 Jul 2024 17:19:22 +0200 Subject: [PATCH 096/105] wip --- fees/silo-finance/index.ts | 177 +++++++++++++++++++++++++++++++++++++ 1 file changed, 177 insertions(+) create mode 100644 fees/silo-finance/index.ts diff --git a/fees/silo-finance/index.ts b/fees/silo-finance/index.ts new file mode 100644 index 0000000000..56e77f4b52 --- /dev/null +++ b/fees/silo-finance/index.ts @@ -0,0 +1,177 @@ +import { Chain } from "@defillama/sdk/build/general"; +import { Adapter, FetchOptions, FetchResultV2 } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; + +type IFactory = { + address: string; + block: number; +}; + +type ISilo = { + lens: string; + factory: IFactory | IFactory[]; +}; + +type IAddress = { + [s: string | Chain]: ISilo[]; +}; + +// const silo: IAddress = { +// [CHAIN.ETHEREUM]: ["0x0e466FC22386997daC23D1f89A43ecb2CB1e76E9","0x32a4Bcd8DEa5E18a12a50584682f8E4B77fFF2DF"], +// [CHAIN.ARBITRUM]: ["0xBDb843c7a7e48Dc543424474d7Aa63b61B5D9536"], +// [CHAIN.OPTIMISM]: ["0xd3De080436b9d38DC315944c16d89C050C414Fed"], +// [CHAIN.BASE]: ["0x196D312fd81412B6443620Ca81B41103b4E123FD"], +// }; + +const silo: IAddress = { + [CHAIN.ETHEREUM]: [ + { + lens: "0x0e466FC22386997daC23D1f89A43ecb2CB1e76E9", + factory: [ + { + address: "0x4D919CEcfD4793c0D47866C8d0a02a0950737589", + block: 15307294, + }, + { + address: "0x6d4A256695586F61b77B09bc3D28333A91114d5a", + block: 17391885, + }, + ], + }, + { + lens: "0x32a4Bcd8DEa5E18a12a50584682f8E4B77fFF2DF", + factory: { + address: "0x2c0fA05281730EFd3ef71172d8992500B36b56eA", + block: 17782576, + }, + }, + ], + // [CHAIN.ARBITRUM]: [ + // { + // lens: "0xBDb843c7a7e48Dc543424474d7Aa63b61B5D9536", + // factory: { + // address: "0x4166487056A922D784b073d4d928a516B074b719", + // block: 51894508, + // }, + // }, + // ], + // [CHAIN.OPTIMISM]: [ + // { + // lens: "0xd3De080436b9d38DC315944c16d89C050C414Fed", + // factory: { + // address: "0x6B14c4450a29Dd9562c20259eBFF67a577b540b9", + // block: 120480601, + // }, + // }, + // ], + // [CHAIN.BASE]: [ + // { + // lens: "0x196D312fd81412B6443620Ca81B41103b4E123FD", + // factory: { + // address: "0x408822E4E8682413666809b0655161093cd36f2b", + // block: 16262586, + // }, + // }, + // ], +}; + +const fallbackBlacklist: string[] = [ + "0x6543ee07cf5dd7ad17aeecf22ba75860ef3bbaaa", +]; + +async function getSilos(silos: ISilo[], { getLogs }: FetchOptions) { + const logs: any = []; + for (const { factory } of silos) { + if (Array.isArray(factory)) { + for (const { address, block } of factory) { + const logChunk = await getLogs({ + target: address, + fromBlock: block, + topic: "NewSiloCreated(address,address,uint128)", + }); + logs.push([...logs, ...logChunk]); + } + } else { + const { address, block } = factory; + console.log(`Address: ${address}, Block: ${block}`); + } + } + + console.log(logs); + + // for (let factory of config[chain].factories) { + // const { SILO_FACTORY, START_BLOCK } = factory; + // let logChunk = await getLogs({ + // api, + // target: SILO_FACTORY, + // fromBlock: START_BLOCK, + // topic: "NewSiloCreated(address,address,uint128)", + // }); + // logs = [...logs, ...logChunk]; + // } + + // return logs + // .map((log) => `0x${log.topics[1].substring(26)}`) + // .filter( + // (address) => fallbackBlacklist.indexOf(address.toLowerCase()) === -1 + // ); +} + +const fetch = async ( + options: FetchOptions, + silos: ISilo[] +): Promise => { + const dailyFees = options.createBalances(); + const test = await getSilos(silos, options); + + // console.log(silo); + + return { dailyFees }; +}; + +const adapter: Adapter = { + adapter: { + [CHAIN.ETHEREUM]: { + fetch: (options: FetchOptions) => fetch(options, silo[CHAIN.ETHEREUM]), + start: 1668812400, + }, + }, + version: 2, +}; + +export default adapter; + +// const config = { +// ethereum: { +// factories: [ +// { +// START_BLOCK: 15307294, +// SILO_FACTORY: '0x4D919CEcfD4793c0D47866C8d0a02a0950737589', // Silo Ethereum (Original) +// }, +// { +// START_BLOCK: 17391885, +// SILO_FACTORY: '0x6d4A256695586F61b77B09bc3D28333A91114d5a' // Silo Ethereum (Convex Factory) +// }, +// { +// START_BLOCK: 17782576, +// SILO_FACTORY: '0x2c0fA05281730EFd3ef71172d8992500B36b56eA' // Silo Ethereum (LLAMA Edition) +// } +// ] +// }, +// arbitrum: { +// factories: [ +// { +// START_BLOCK: 51894508, +// SILO_FACTORY: '0x4166487056A922D784b073d4d928a516B074b719', // Silo Arbitrum (Original) +// } +// ] +// }, +// optimism: { +// factories: [ +// { +// START_BLOCK: 120480601, +// SILO_FACTORY: '0x6B14c4450a29Dd9562c20259eBFF67a577b540b9', // Silo Optimism (Original) +// } +// ] +// }, +// } From 5780c69e25bca1d70b5dec3e80060cf0f84b32bf Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 25 Jul 2024 16:11:53 +0000 Subject: [PATCH 097/105] fix address --- fees/betmode.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fees/betmode.ts b/fees/betmode.ts index 9eda49f321..2fed4e2d79 100644 --- a/fees/betmode.ts +++ b/fees/betmode.ts @@ -1,7 +1,7 @@ import { FetchOptions, SimpleAdapter } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; -const address = '0xdfc7c877a950e49d2610114102175a06c2e3167a' +const address = '0x79b4be7eD13Eef58Bd15ABd6ed79569f21D6c3AF' const fetch = async (options: FetchOptions) => { const dailyFees = options.createBalances(); const feesStart = await options.fromApi.call({target: address, abi: "uint:totalWagered"}) From 5cab25caae4feda400d20f15c687b7be22e01488 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 25 Jul 2024 16:13:16 +0000 Subject: [PATCH 098/105] fix div --- fees/betmode.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fees/betmode.ts b/fees/betmode.ts index 2fed4e2d79..dface90387 100644 --- a/fees/betmode.ts +++ b/fees/betmode.ts @@ -7,8 +7,8 @@ const fetch = async (options: FetchOptions) => { const feesStart = await options.fromApi.call({target: address, abi: "uint:totalWagered"}) const feesEnd = await options.toApi.call({target: address, abi: "uint:totalWagered"}) dailyFees.add("0xDfc7C877a950e49D2610114102175A06C2e3167a", feesEnd-feesStart) - dailyFees.resizeBy(1/100) - return {dailyFees} + dailyFees.resizeBy(0.01) + return {dailyFees, dailyRevenue: dailyFees} } const adapter: SimpleAdapter = { From fa2be1669badf172f91f12d1027db08d98431934 Mon Sep 17 00:00:00 2001 From: 0xpeluche <0xpeluche@protonmail.com> Date: Thu, 25 Jul 2024 18:57:52 +0200 Subject: [PATCH 099/105] feat: Adapter Silo-finance totalFees --- fees/silo-finance/index.ts | 255 +++++++++++++++++++++---------------- 1 file changed, 146 insertions(+), 109 deletions(-) diff --git a/fees/silo-finance/index.ts b/fees/silo-finance/index.ts index 56e77f4b52..44422120c3 100644 --- a/fees/silo-finance/index.ts +++ b/fees/silo-finance/index.ts @@ -10,19 +10,13 @@ type IFactory = { type ISilo = { lens: string; factory: IFactory | IFactory[]; + silos?: { silo: string; assets: string[] }[]; }; type IAddress = { [s: string | Chain]: ISilo[]; }; -// const silo: IAddress = { -// [CHAIN.ETHEREUM]: ["0x0e466FC22386997daC23D1f89A43ecb2CB1e76E9","0x32a4Bcd8DEa5E18a12a50584682f8E4B77fFF2DF"], -// [CHAIN.ARBITRUM]: ["0xBDb843c7a7e48Dc543424474d7Aa63b61B5D9536"], -// [CHAIN.OPTIMISM]: ["0xd3De080436b9d38DC315944c16d89C050C414Fed"], -// [CHAIN.BASE]: ["0x196D312fd81412B6443620Ca81B41103b4E123FD"], -// }; - const silo: IAddress = { [CHAIN.ETHEREUM]: [ { @@ -46,132 +40,175 @@ const silo: IAddress = { }, }, ], - // [CHAIN.ARBITRUM]: [ - // { - // lens: "0xBDb843c7a7e48Dc543424474d7Aa63b61B5D9536", - // factory: { - // address: "0x4166487056A922D784b073d4d928a516B074b719", - // block: 51894508, - // }, - // }, - // ], - // [CHAIN.OPTIMISM]: [ - // { - // lens: "0xd3De080436b9d38DC315944c16d89C050C414Fed", - // factory: { - // address: "0x6B14c4450a29Dd9562c20259eBFF67a577b540b9", - // block: 120480601, - // }, - // }, - // ], - // [CHAIN.BASE]: [ - // { - // lens: "0x196D312fd81412B6443620Ca81B41103b4E123FD", - // factory: { - // address: "0x408822E4E8682413666809b0655161093cd36f2b", - // block: 16262586, - // }, - // }, - // ], + [CHAIN.ARBITRUM]: [ + { + lens: "0xBDb843c7a7e48Dc543424474d7Aa63b61B5D9536", + factory: { + address: "0x4166487056A922D784b073d4d928a516B074b719", + block: 51894508, + }, + }, + ], + [CHAIN.OPTIMISM]: [ + { + lens: "0xd3De080436b9d38DC315944c16d89C050C414Fed", + factory: { + address: "0x6B14c4450a29Dd9562c20259eBFF67a577b540b9", + block: 120480601, + }, + }, + ], + [CHAIN.BASE]: [ + { + lens: "0x196D312fd81412B6443620Ca81B41103b4E123FD", + factory: { + address: "0x408822E4E8682413666809b0655161093cd36f2b", + block: 16262586, + }, + }, + ], }; -const fallbackBlacklist: string[] = [ - "0x6543ee07cf5dd7ad17aeecf22ba75860ef3bbaaa", -]; - -async function getSilos(silos: ISilo[], { getLogs }: FetchOptions) { +async function getSilos( + silos: ISilo[], + { getLogs }: FetchOptions +): Promise { const logs: any = []; + + const fetchLogsFromFactory = async (address: string, block: number) => { + const logChunk = await getLogs({ + target: address, + fromBlock: block, + eventAbi: + "event NewSiloCreated(address indexed silo, address indexed asset, uint128 version)", + }); + + logs.push(logChunk.map((result) => result[0])); + }; + for (const { factory } of silos) { if (Array.isArray(factory)) { for (const { address, block } of factory) { - const logChunk = await getLogs({ - target: address, - fromBlock: block, - topic: "NewSiloCreated(address,address,uint128)", - }); - logs.push([...logs, ...logChunk]); + await fetchLogsFromFactory(address, block); } } else { const { address, block } = factory; - console.log(`Address: ${address}, Block: ${block}`); + await fetchLogsFromFactory(address, block); } } - console.log(logs); - - // for (let factory of config[chain].factories) { - // const { SILO_FACTORY, START_BLOCK } = factory; - // let logChunk = await getLogs({ - // api, - // target: SILO_FACTORY, - // fromBlock: START_BLOCK, - // topic: "NewSiloCreated(address,address,uint128)", - // }); - // logs = [...logs, ...logChunk]; - // } - - // return logs - // .map((log) => `0x${log.topics[1].substring(26)}`) - // .filter( - // (address) => fallbackBlacklist.indexOf(address.toLowerCase()) === -1 - // ); + return silos.map((silo, index) => ({ + ...silo, + silos: logs[index]?.map((siloAddress: string) => ({ + silo: siloAddress, + assets: [], + })), + })); } -const fetch = async ( - options: FetchOptions, - silos: ISilo[] -): Promise => { - const dailyFees = options.createBalances(); - const test = await getSilos(silos, options); +async function getSilosAssets( + silos: ISilo[], + { api }: FetchOptions +): Promise { + const siloAddresses = silos.flatMap((silo) => + (silo.silos || []).map((s) => ({ target: s.silo })) + ); + + const assetsInSilosRes = await api.multiCall({ + calls: siloAddresses, + abi: "function getAssets() view returns (address[] assets)", + }); + + const assetsMap: { [key: string]: string[] } = {}; + siloAddresses.forEach((call, index) => { + assetsMap[call.target] = assetsInSilosRes[index]; + }); + + return silos.map((silo) => ({ + ...silo, + silos: (silo.silos || []).map((s) => ({ + silo: s.silo, + assets: assetsMap[s.silo] || [], + })), + })); +} - // console.log(silo); +async function getSilosFeesStorage( + rawSilos: ISilo[], + { api }: FetchOptions +): Promise<{ asset: string; fee: bigint }[]> { + const calls = rawSilos.flatMap((silo) => + (silo.silos || []).flatMap(({ silo: siloAddress, assets }) => + assets.map((asset) => ({ + target: silo.lens, + params: [siloAddress, asset], + })) + ) + ); + + const assetsInSilosRes = await api.multiCall({ + calls: calls, + abi: "function protocolFees(address _silo, address _asset) view returns (uint256)", + }); + + const feesMap: { [key: string]: { [key: string]: bigint } } = {}; + calls.forEach((call, index) => { + const [siloAddress, asset] = call.params; + if (!feesMap[siloAddress]) { + feesMap[siloAddress] = {}; + } + feesMap[siloAddress][asset] = assetsInSilosRes[index]; + }); + + const results: { asset: string; fee: bigint }[] = []; + rawSilos.forEach((silo) => { + (silo.silos || []).forEach((s) => { + s.assets.forEach((asset) => { + const fee = feesMap[s.silo]?.[asset] || 0n; + results.push({ asset, fee }); + }); + }); + }); + + return results; +} - return { dailyFees }; -}; +async function fetch( + options: FetchOptions, + rawSilos: ISilo[] +): Promise { + const totalFees = options.createBalances(); + const rawSiloWithAddresses = await getSilos(rawSilos, options); + const siloWithAssets = await getSilosAssets(rawSiloWithAddresses, options); + const feesInSilos = await getSilosFeesStorage(siloWithAssets, options); + + feesInSilos.forEach(({ asset, fee }) => { + totalFees.add(asset, fee); + }); + + return { totalFees }; +} const adapter: Adapter = { adapter: { [CHAIN.ETHEREUM]: { fetch: (options: FetchOptions) => fetch(options, silo[CHAIN.ETHEREUM]), - start: 1668812400, + start: 1660150409, + }, + [CHAIN.ARBITRUM]: { + fetch: (options: FetchOptions) => fetch(options, silo[CHAIN.ARBITRUM]), + start: 1683046409, + }, + [CHAIN.OPTIMISM]: { + fetch: (options: FetchOptions) => fetch(options, silo[CHAIN.OPTIMISM]), + start: 1716656009, + }, + [CHAIN.BASE]: { + fetch: (options: FetchOptions) => fetch(options, silo[CHAIN.BASE]), + start: 1719420809, }, }, version: 2, }; export default adapter; - -// const config = { -// ethereum: { -// factories: [ -// { -// START_BLOCK: 15307294, -// SILO_FACTORY: '0x4D919CEcfD4793c0D47866C8d0a02a0950737589', // Silo Ethereum (Original) -// }, -// { -// START_BLOCK: 17391885, -// SILO_FACTORY: '0x6d4A256695586F61b77B09bc3D28333A91114d5a' // Silo Ethereum (Convex Factory) -// }, -// { -// START_BLOCK: 17782576, -// SILO_FACTORY: '0x2c0fA05281730EFd3ef71172d8992500B36b56eA' // Silo Ethereum (LLAMA Edition) -// } -// ] -// }, -// arbitrum: { -// factories: [ -// { -// START_BLOCK: 51894508, -// SILO_FACTORY: '0x4166487056A922D784b073d4d928a516B074b719', // Silo Arbitrum (Original) -// } -// ] -// }, -// optimism: { -// factories: [ -// { -// START_BLOCK: 120480601, -// SILO_FACTORY: '0x6B14c4450a29Dd9562c20259eBFF67a577b540b9', // Silo Optimism (Original) -// } -// ] -// }, -// } From 227df422aea4bcf5d6be47e2b7fcd533b8b275fa Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Thu, 25 Jul 2024 18:27:19 +0100 Subject: [PATCH 100/105] v1 uni --- dexs/ArbitrumExchange/index.ts | 1 - dexs/DerpDEX/index.ts | 2 +- dexs/SmarDex/index.ts | 2 +- dexs/agni-fi/index.ts | 1 - dexs/archly-finance/index.ts | 1 - dexs/baseswap/index.ts | 1 - dexs/beamswap-v3/index.ts | 1 - dexs/beamswap/index.ts | 1 - dexs/butterxyz/index.ts | 1 - dexs/dackieswap-v2/index.ts | 1 - dexs/dackieswap/index.ts | 1 - dexs/doveswap/index.ts | 1 - dexs/dragonswap/index.ts | 1 - dexs/firefly/index.ts | 1 - dexs/fusionx-v2/index.ts | 1 - dexs/fusionx-v3/index.ts | 1 - dexs/glyph-exchange/index.ts | 1 - dexs/horiza/index.ts | 1 - dexs/hydradex/index.ts | 1 - dexs/jswap/index.ts | 1 - dexs/kinetix-v3/index.ts | 1 - dexs/linehub-v3/index.ts | 1 - dexs/maia-v3/index.ts | 1 - dexs/metavault-v3/index.ts | 1 - dexs/miaswap/index.ts | 1 - dexs/monocerus/index.ts | 1 - dexs/nomiswap/index.ts | 5 ++-- dexs/quickswap/index.ts | 1 - dexs/retro/index.ts | 1 - dexs/shimmersea/index.ts | 1 - dexs/squadswap-v2/index.ts | 1 - dexs/squadswap-v3/index.ts | 1 - dexs/supswap-v2/index.ts | 1 - dexs/supswap-v3/index.ts | 1 - dexs/surfswap/index.ts | 1 - dexs/sushiswap/classic.ts | 4 ++-- dexs/swapbased/index.ts | 1 - dexs/tangleswap/index.ts | 1 - dexs/throne-v3/index.ts | 1 - dexs/xswap-protocol/index.ts | 1 - dexs/zkswap/index.ts | 8 +++---- fees/ascent-v3.ts | 1 - fees/cleopatra-exchange.ts | 1 - fees/dragonswap/index.ts | 1 - fees/kyotoswap.ts | 1 - fees/nile-exchange/index.ts | 29 ++++++++++++---------- fees/nuri-exchange-v2/index.ts | 29 ++++++++++++---------- fees/pharaoh-exchange.ts | 1 - fees/quickswap.ts | 1 - fees/ramses-exchange-v2/index.ts | 24 ++++++++++--------- fees/zyberswap.ts | 1 - helpers/getUniSubgraph/index.ts | 25 +++++++++---------- helpers/getUniSubgraphVolume.ts | 41 ++++++++++++++------------------ protocols/pancakeswap/index.ts | 9 ++++--- protocols/smbswap/index.ts | 6 ++--- protocols/uniswap/index.ts | 28 +++++++++++----------- 56 files changed, 104 insertions(+), 151 deletions(-) diff --git a/dexs/ArbitrumExchange/index.ts b/dexs/ArbitrumExchange/index.ts index 53c1042e64..758d103522 100644 --- a/dexs/ArbitrumExchange/index.ts +++ b/dexs/ArbitrumExchange/index.ts @@ -67,7 +67,6 @@ const startTimeV3:TStartTime = { [CHAIN.ARBITRUM]: 1683590400, } const adapter: BreakdownAdapter = { - version: 2, breakdown: { v2: { [CHAIN.ARBITRUM]: { diff --git a/dexs/DerpDEX/index.ts b/dexs/DerpDEX/index.ts index f4dc81e508..f05be439b4 100644 --- a/dexs/DerpDEX/index.ts +++ b/dexs/DerpDEX/index.ts @@ -42,7 +42,7 @@ const v3Graphs = getGraphDimensions({ }, }); -const adapter: Adapter = { adapter: {}, version: 2 }; +const adapter: Adapter = { adapter: {} }; Object.keys(endpoints).map((chain: string) => { adapter.adapter[chain] = { diff --git a/dexs/SmarDex/index.ts b/dexs/SmarDex/index.ts index 7bc1ae13a0..05f8db0527 100644 --- a/dexs/SmarDex/index.ts +++ b/dexs/SmarDex/index.ts @@ -66,7 +66,7 @@ const graphs = getGraphDimensions({ }, }); -const adapter: SimpleAdapter = { adapter: {}, version: 2 } +const adapter: SimpleAdapter = { adapter: {} } Object.keys(graphUrls).map((chain: string) => { adapter.adapter[chain] = { diff --git a/dexs/agni-fi/index.ts b/dexs/agni-fi/index.ts index 9262673b16..9fbfa25c80 100644 --- a/dexs/agni-fi/index.ts +++ b/dexs/agni-fi/index.ts @@ -34,7 +34,6 @@ const v3Graphs = getGraphDimensions({ }); const adapter: SimpleAdapter = { - version: 2, adapter: { [CHAIN.MANTLE]: { fetch: v3Graphs(CHAIN.MANTLE), diff --git a/dexs/archly-finance/index.ts b/dexs/archly-finance/index.ts index e8b48b3d57..755b578d01 100644 --- a/dexs/archly-finance/index.ts +++ b/dexs/archly-finance/index.ts @@ -27,7 +27,6 @@ const graphFetch = getGraphDimensions({ }); const adapter: Adapter = { - version: 2, adapter: { [CHAIN.TELOS]: { fetch: graphFetch(CHAIN.TELOS), diff --git a/dexs/baseswap/index.ts b/dexs/baseswap/index.ts index e4b014d39c..efcebea6b2 100644 --- a/dexs/baseswap/index.ts +++ b/dexs/baseswap/index.ts @@ -79,7 +79,6 @@ const startTimeV3 = { }; const adapter: BreakdownAdapter = { - version: 2, breakdown: { v2: Object.keys(v2Endpoints).reduce((acc, chain) => { return { diff --git a/dexs/beamswap-v3/index.ts b/dexs/beamswap-v3/index.ts index 531c4f6ed6..f9a1905aa8 100644 --- a/dexs/beamswap-v3/index.ts +++ b/dexs/beamswap-v3/index.ts @@ -40,7 +40,6 @@ const methodologyv3 = { }; const adapter: BreakdownAdapter = { - version: 2, breakdown: { v3: { [CHAIN.MOONBEAN]: { diff --git a/dexs/beamswap/index.ts b/dexs/beamswap/index.ts index 79edc89899..e52323bf82 100644 --- a/dexs/beamswap/index.ts +++ b/dexs/beamswap/index.ts @@ -77,7 +77,6 @@ const methodologyStable = { }; const adapter: BreakdownAdapter = { - version: 2, breakdown: { classic: { [CHAIN.MOONBEAN]: { diff --git a/dexs/butterxyz/index.ts b/dexs/butterxyz/index.ts index 793a5c8ea7..a11ff6c622 100644 --- a/dexs/butterxyz/index.ts +++ b/dexs/butterxyz/index.ts @@ -30,7 +30,6 @@ const dimensions = getGraphDimensions({ }); export default { - version: 2, adapter: { [CHAIN.MANTLE]: { fetch: dimensions(CHAIN.MANTLE), diff --git a/dexs/dackieswap-v2/index.ts b/dexs/dackieswap-v2/index.ts index 7d8aa9092a..849acc869a 100644 --- a/dexs/dackieswap-v2/index.ts +++ b/dexs/dackieswap-v2/index.ts @@ -44,7 +44,6 @@ const methodology = { }; const adapter: SimpleAdapter = { - version: 2, adapter: Object.keys(endpoints).reduce((acc, chain) => { return { ...acc, diff --git a/dexs/dackieswap/index.ts b/dexs/dackieswap/index.ts index 981e9e22be..dd87773d4b 100644 --- a/dexs/dackieswap/index.ts +++ b/dexs/dackieswap/index.ts @@ -74,7 +74,6 @@ const adapter: SimpleAdapter = { start: async () => v3StartTimes[CHAIN.XLAYER] }, }, - version: 2 }; export default adapter; diff --git a/dexs/doveswap/index.ts b/dexs/doveswap/index.ts index 266e95c726..18be32c56f 100644 --- a/dexs/doveswap/index.ts +++ b/dexs/doveswap/index.ts @@ -55,7 +55,6 @@ const startTimeV3:TStartTime = { } const adapter: BreakdownAdapter = { - version: 2, breakdown: { v3: Object.keys(v3Endpoints).reduce((acc, chain) => { acc[chain] = { diff --git a/dexs/dragonswap/index.ts b/dexs/dragonswap/index.ts index 9c86871dc5..16dc59c4ee 100644 --- a/dexs/dragonswap/index.ts +++ b/dexs/dragonswap/index.ts @@ -73,7 +73,6 @@ const v3Graph = getGraphDimensions({ }); const adapter: BreakdownAdapter = { - version: 2, breakdown: { v2: Object.keys(endpoints).reduce((acc, chain) => { acc[chain] = { diff --git a/dexs/firefly/index.ts b/dexs/firefly/index.ts index e6d4232a20..6206065e1d 100644 --- a/dexs/firefly/index.ts +++ b/dexs/firefly/index.ts @@ -46,7 +46,6 @@ const startTimeV3: TStartTime = { }; const adapter: BreakdownAdapter = { - version: 2, breakdown: { v3: Object.keys(v3Endpoints).reduce((acc, chain) => { acc[chain] = { diff --git a/dexs/fusionx-v2/index.ts b/dexs/fusionx-v2/index.ts index 0ec617436f..e871b210ef 100644 --- a/dexs/fusionx-v2/index.ts +++ b/dexs/fusionx-v2/index.ts @@ -28,7 +28,6 @@ const v2Graphs = getGraphDimensions({ }); const adapter: SimpleAdapter = { - version: 2, adapter: { [CHAIN.MANTLE]: { fetch: v2Graphs(CHAIN.MANTLE), diff --git a/dexs/fusionx-v3/index.ts b/dexs/fusionx-v3/index.ts index de797f05fd..9cb028c967 100644 --- a/dexs/fusionx-v3/index.ts +++ b/dexs/fusionx-v3/index.ts @@ -34,7 +34,6 @@ const v3Graphs = getGraphDimensions({ }); const adapter: SimpleAdapter = { - version: 2, adapter: { [CHAIN.MANTLE]: { fetch: v3Graphs(CHAIN.MANTLE), diff --git a/dexs/glyph-exchange/index.ts b/dexs/glyph-exchange/index.ts index a181dd2080..2750c71756 100644 --- a/dexs/glyph-exchange/index.ts +++ b/dexs/glyph-exchange/index.ts @@ -60,7 +60,6 @@ const classic = Object.keys(endpointsClassic).reduce( ) as any; const adapter: BreakdownAdapter = { - version: 2, breakdown: { classic: classic, } diff --git a/dexs/horiza/index.ts b/dexs/horiza/index.ts index ef1f305ec5..d84a44b2d6 100644 --- a/dexs/horiza/index.ts +++ b/dexs/horiza/index.ts @@ -27,7 +27,6 @@ const v3Graphs = getGraphDimensions({ }); const adapters: SimpleAdapter = { - version: 2, adapter: { [CHAIN.ARBITRUM]: { fetch: v3Graphs(CHAIN.ARBITRUM), diff --git a/dexs/hydradex/index.ts b/dexs/hydradex/index.ts index d1595ba26b..0ec74827f5 100644 --- a/dexs/hydradex/index.ts +++ b/dexs/hydradex/index.ts @@ -118,7 +118,6 @@ const methodology = { }; const adapter: BreakdownAdapter = { - version: 2, breakdown: { v2: { [DISABLED_ADAPTER_KEY]: disabledAdapter, diff --git a/dexs/jswap/index.ts b/dexs/jswap/index.ts index 9048810a9f..303d9a80a7 100644 --- a/dexs/jswap/index.ts +++ b/dexs/jswap/index.ts @@ -57,7 +57,6 @@ const graphs = getGraphDimensions({ }); const adapter: SimpleAdapter = { - version: 2, adapter: { [DISABLED_ADAPTER_KEY]: disabledAdapter, [CHAIN.OKEXCHAIN]: { diff --git a/dexs/kinetix-v3/index.ts b/dexs/kinetix-v3/index.ts index 99c3aa610a..134e4738bb 100644 --- a/dexs/kinetix-v3/index.ts +++ b/dexs/kinetix-v3/index.ts @@ -58,7 +58,6 @@ const v3 = Object.keys(endpointsV3).reduce( ); const adapter: BreakdownAdapter = { - version: 2, breakdown: { v3: v3, }, diff --git a/dexs/linehub-v3/index.ts b/dexs/linehub-v3/index.ts index 252de64626..7694a62147 100644 --- a/dexs/linehub-v3/index.ts +++ b/dexs/linehub-v3/index.ts @@ -55,7 +55,6 @@ const v3 = Object.keys(endpointsV3).reduce( ); const adapter: BreakdownAdapter = { - version: 2, breakdown: { v3: v3, }, diff --git a/dexs/maia-v3/index.ts b/dexs/maia-v3/index.ts index 3f378c053a..85ade78b31 100644 --- a/dexs/maia-v3/index.ts +++ b/dexs/maia-v3/index.ts @@ -42,7 +42,6 @@ const methodology = { } const adapter: SimpleAdapter = { - version: 2, adapter: { [CHAIN.METIS]: { fetch: v3Graphs(CHAIN.METIS), diff --git a/dexs/metavault-v3/index.ts b/dexs/metavault-v3/index.ts index bf5329928c..0ce88b4093 100644 --- a/dexs/metavault-v3/index.ts +++ b/dexs/metavault-v3/index.ts @@ -56,7 +56,6 @@ const v3 = Object.keys(endpointsV3).reduce( ); const adapter: BreakdownAdapter = { - version: 2, breakdown: { v3: v3, }, diff --git a/dexs/miaswap/index.ts b/dexs/miaswap/index.ts index d726bb852d..4740724a04 100644 --- a/dexs/miaswap/index.ts +++ b/dexs/miaswap/index.ts @@ -35,7 +35,6 @@ const v3Graphs = getGraphDimensions({ }); const adapter: SimpleAdapter = { - version: 2, adapter: { [DISABLED_ADAPTER_KEY]: disabledAdapter, [CHAIN.ONUS]: { diff --git a/dexs/monocerus/index.ts b/dexs/monocerus/index.ts index 3b5b4ec443..3d5e9b6420 100644 --- a/dexs/monocerus/index.ts +++ b/dexs/monocerus/index.ts @@ -33,7 +33,6 @@ const v3Graphs = getGraphDimensions({ }); const adapter: Adapter = { - version: 2, adapter: { [DISABLED_ADAPTER_KEY]: disabledAdapter, [CHAIN.MANTA]: { diff --git a/dexs/nomiswap/index.ts b/dexs/nomiswap/index.ts index 52e6f2605b..d5ec58f8bd 100644 --- a/dexs/nomiswap/index.ts +++ b/dexs/nomiswap/index.ts @@ -29,11 +29,10 @@ const graphsClassic = getGraphDimensions({ }); const adapters: SimpleAdapter = { - version: 2, adapter: { [CHAIN.BSC]: { - fetch: async (options: FetchOptions) => { - const data = await graphsClassic(CHAIN.BSC)(options); + fetch: async (timestamp, chainBlocks) => { + const data = await graphsClassic(CHAIN.BSC)(timestamp, chainBlocks); const removeSpike = Number(data.totalVolume) - 7035654137.527446631277942307129497; data.totalVolume = removeSpike > 0 ? removeSpike : data.totalVolume; return { diff --git a/dexs/quickswap/index.ts b/dexs/quickswap/index.ts index df845cb1f8..b049764625 100644 --- a/dexs/quickswap/index.ts +++ b/dexs/quickswap/index.ts @@ -86,7 +86,6 @@ const fetchLiquidityHub = async (timestamp: number) => { const adapter: BreakdownAdapter = { - version: 2, breakdown: { v2: { [CHAIN.POLYGON]: { diff --git a/dexs/retro/index.ts b/dexs/retro/index.ts index b3f140b2fc..d6234ae666 100644 --- a/dexs/retro/index.ts +++ b/dexs/retro/index.ts @@ -28,7 +28,6 @@ const v3Graphs = getGraphDimensions({ }); const adapters: SimpleAdapter = { - version: 2, adapter: { [CHAIN.POLYGON]: { fetch: v3Graphs(CHAIN.POLYGON), diff --git a/dexs/shimmersea/index.ts b/dexs/shimmersea/index.ts index 706467e701..425c1a958e 100644 --- a/dexs/shimmersea/index.ts +++ b/dexs/shimmersea/index.ts @@ -27,7 +27,6 @@ const v3Graphs = getGraphDimensions({ }); const adapter: SimpleAdapter = { - version: 2, adapter: Object.keys(v3Endpoints).reduce((acc, chain) => { return { ...acc, diff --git a/dexs/squadswap-v2/index.ts b/dexs/squadswap-v2/index.ts index 55579b1da3..7a0f450983 100644 --- a/dexs/squadswap-v2/index.ts +++ b/dexs/squadswap-v2/index.ts @@ -30,7 +30,6 @@ const v2Graph = getGraphDimensions({ }); const adapter: SimpleAdapter = { - version: 2, adapter: { [CHAIN.BSC]: { fetch: v2Graph(CHAIN.BSC), diff --git a/dexs/squadswap-v3/index.ts b/dexs/squadswap-v3/index.ts index 0ea3735659..534dfab7f6 100644 --- a/dexs/squadswap-v3/index.ts +++ b/dexs/squadswap-v3/index.ts @@ -34,7 +34,6 @@ const v3Graphs = getGraphDimensions({ }); const adapter: SimpleAdapter = { - version: 2, adapter: { [CHAIN.BSC]: { fetch: v3Graphs(CHAIN.BSC), diff --git a/dexs/supswap-v2/index.ts b/dexs/supswap-v2/index.ts index 4642869cf6..7efae4a30f 100644 --- a/dexs/supswap-v2/index.ts +++ b/dexs/supswap-v2/index.ts @@ -28,7 +28,6 @@ const v2Graphs = getGraphDimensions({ }); const adapter: SimpleAdapter = { - version: 2, adapter: { [CHAIN.MODE]: { fetch: v2Graphs(CHAIN.MODE), diff --git a/dexs/supswap-v3/index.ts b/dexs/supswap-v3/index.ts index 1d0569a1bf..d09a6cb0f7 100644 --- a/dexs/supswap-v3/index.ts +++ b/dexs/supswap-v3/index.ts @@ -34,7 +34,6 @@ const v3Graphs = getGraphDimensions({ }); const adapter: SimpleAdapter = { - version: 2, adapter: { [CHAIN.MODE]: { fetch: v3Graphs(CHAIN.MODE), diff --git a/dexs/surfswap/index.ts b/dexs/surfswap/index.ts index ad2dccdb8e..661b7f624a 100644 --- a/dexs/surfswap/index.ts +++ b/dexs/surfswap/index.ts @@ -67,7 +67,6 @@ const v1graphs = getGraphDimensions({ }); const adapter: BreakdownAdapter = { - version: 2, breakdown: { classic: { [CHAIN.KAVA]: { diff --git a/dexs/sushiswap/classic.ts b/dexs/sushiswap/classic.ts index df4c746801..3bba28e741 100644 --- a/dexs/sushiswap/classic.ts +++ b/dexs/sushiswap/classic.ts @@ -154,8 +154,8 @@ const fantomGraphs = getChainVolumeWithGasToken({ priceToken: "coingecko:fantom" } as any); classic[CHAIN.FANTOM] = { - fetch: async (options: FetchOptions) => { - const values = await fantomGraphs(CHAIN.FANTOM)(options); + fetch: async (timestamp, chainBlocks) => { + const values = await fantomGraphs(CHAIN.FANTOM)(timestamp, chainBlocks); const vol = Number(values.dailyVolume) return { ...values, diff --git a/dexs/swapbased/index.ts b/dexs/swapbased/index.ts index 58fddaa849..0bbfeb46cb 100644 --- a/dexs/swapbased/index.ts +++ b/dexs/swapbased/index.ts @@ -191,7 +191,6 @@ const getFetch = }; const adapter: BreakdownAdapter = { - version: 2, breakdown: { v2: { [CHAIN.BASE]: { diff --git a/dexs/tangleswap/index.ts b/dexs/tangleswap/index.ts index 6354b59383..d4bb141392 100644 --- a/dexs/tangleswap/index.ts +++ b/dexs/tangleswap/index.ts @@ -24,7 +24,6 @@ const v3Graphs = getGraphDimensions({ }); const adapter: SimpleAdapter = { - version: 2, adapter: Object.keys(v3Endpoints).reduce((acc, chain) => { return { ...acc, diff --git a/dexs/throne-v3/index.ts b/dexs/throne-v3/index.ts index 619672e576..9ca829ca97 100644 --- a/dexs/throne-v3/index.ts +++ b/dexs/throne-v3/index.ts @@ -34,7 +34,6 @@ const v3StartTimes = { } as IJSON; const adapter: SimpleAdapter = { - version: 2, adapter: { [CHAIN.BASE]: { fetch: v3Graph(CHAIN.BASE), diff --git a/dexs/xswap-protocol/index.ts b/dexs/xswap-protocol/index.ts index 6daa99921a..f00e3083c6 100644 --- a/dexs/xswap-protocol/index.ts +++ b/dexs/xswap-protocol/index.ts @@ -17,7 +17,6 @@ const graphs = getGraphDimensions({ }); const adapters: SimpleAdapter = { - version: 2, adapter: { [CHAIN.XDC]: { fetch: graphs(CHAIN.XDC), diff --git a/dexs/zkswap/index.ts b/dexs/zkswap/index.ts index 7ab3d543b8..94fb4129cd 100644 --- a/dexs/zkswap/index.ts +++ b/dexs/zkswap/index.ts @@ -1,5 +1,4 @@ -import { time } from "console"; -import { FetchOptions, SimpleAdapter } from "../../adapters/types"; +import { SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { getGraphDimensions } from "../../helpers/getUniSubgraph"; @@ -27,11 +26,10 @@ const graph = getGraphDimensions({ }); const adapters: SimpleAdapter = { - version: 2, adapter: { [CHAIN.ERA]: { - fetch: async (options: FetchOptions) => { - const data = await graph(CHAIN.ERA)(options); + fetch: async (timestamp, chainBlocks) => { + const data = await graph(CHAIN.ERA)(timestamp, chainBlocks); data.totalVolume = undefined; return { ...data diff --git a/fees/ascent-v3.ts b/fees/ascent-v3.ts index 1d26faf801..8a80a3c633 100644 --- a/fees/ascent-v3.ts +++ b/fees/ascent-v3.ts @@ -45,7 +45,6 @@ const v3Graphs = getGraphDimensions({ }); const adapter: SimpleAdapter = { - version: 2, adapter: { [CHAIN.EON]: { fetch: v3Graphs(CHAIN.EON), diff --git a/fees/cleopatra-exchange.ts b/fees/cleopatra-exchange.ts index de80206631..e22c0f2f13 100644 --- a/fees/cleopatra-exchange.ts +++ b/fees/cleopatra-exchange.ts @@ -48,7 +48,6 @@ const methodology = { }; const adapter: SimpleAdapter = { - version: 2, adapter: { [CHAIN.MANTLE]: { fetch: v2Graphs(MANTLE), diff --git a/fees/dragonswap/index.ts b/fees/dragonswap/index.ts index 9648b3661c..b0b8dfec39 100644 --- a/fees/dragonswap/index.ts +++ b/fees/dragonswap/index.ts @@ -73,7 +73,6 @@ const v3Graph = getGraphDimensions({ }); const adapter: BreakdownAdapter = { - version: 2, breakdown: { v2: Object.keys(endpoints).reduce((acc, chain) => { acc[chain] = { diff --git a/fees/kyotoswap.ts b/fees/kyotoswap.ts index 15ef9b3f38..4954f402dd 100644 --- a/fees/kyotoswap.ts +++ b/fees/kyotoswap.ts @@ -47,7 +47,6 @@ const methodology = { }; const adapter: Adapter = { - version: 2, adapter: Object.keys(endpoints).reduce((acc, chain) => { acc[chain] = { fetch: graphs(chain as Chain), diff --git a/fees/nile-exchange/index.ts b/fees/nile-exchange/index.ts index ea38c99ce3..8348675ebb 100644 --- a/fees/nile-exchange/index.ts +++ b/fees/nile-exchange/index.ts @@ -1,11 +1,14 @@ -import { Adapter, FetchOptions } from "../../adapters/types"; -import { ARBITRUM, CHAIN } from "../../helpers/chains"; +import { Adapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; import { fees_bribes } from './bribes'; import { getGraphDimensions, DEFAULT_DAILY_VOLUME_FACTORY, DEFAULT_TOTAL_VOLUME_FIELD, } from "../../helpers/getUniSubgraph" +import { getBlock } from "@defillama/sdk/build/util/blocks"; +import { Chain } from "@defillama/sdk/build/types"; +import { Balances } from "@defillama/sdk"; type TStartTime = { [key: string]: number; @@ -14,15 +17,16 @@ const startTimeV2: TStartTime = { [CHAIN.LINEA]: 1705968000, } -const getBribes = async ({ fromTimestamp, toTimestamp, createBalances, getFromBlock, }: FetchOptions): Promise => { - const fromBlock = await getFromBlock() - const bribes = createBalances(); - const bribes_delta = createBalances(); - await fees_bribes(fromBlock, toTimestamp, bribes_delta); - await fees_bribes(fromBlock, fromTimestamp, bribes); +const getBribes = async (chain: Chain, timestamp: number): Promise => { + const fromTimestamp = timestamp - 24 * 60 * 60 + const fromBlock = await getBlock(chain, fromTimestamp) + const bribes_delta: Balances = new Balances({}) + const bribes: Balances = new Balances({}) + await fees_bribes(fromBlock.block, timestamp, bribes_delta); + await fees_bribes(fromBlock.block, fromTimestamp, bribes); bribes.subtract(bribes_delta); return { - timestamp: toTimestamp, + timestamp, dailyBribesRevenue: bribes, }; }; @@ -61,12 +65,11 @@ const methodology = { } const adapter: Adapter = { - version: 2, adapter: { [CHAIN.LINEA]: { - fetch: async (options: FetchOptions) => { - const v2Result = await v2Graphs(CHAIN.LINEA)(options) - const bribesResult = await getBribes(options); + fetch: async (timestamp, chainBlocks) => { + const v2Result = await v2Graphs(CHAIN.LINEA)(timestamp, chainBlocks) + const bribesResult = await getBribes(CHAIN.LINEA, timestamp); v2Result.dailyBribesRevenue = bribesResult.dailyBribesRevenue; return v2Result; diff --git a/fees/nuri-exchange-v2/index.ts b/fees/nuri-exchange-v2/index.ts index ace7747bcb..71fd360669 100644 --- a/fees/nuri-exchange-v2/index.ts +++ b/fees/nuri-exchange-v2/index.ts @@ -1,11 +1,14 @@ -import { Adapter, FetchOptions } from "../../adapters/types"; -import { ARBITRUM, CHAIN } from "../../helpers/chains"; +import { Adapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; import { fees_bribes } from './bribes'; import { getGraphDimensions, DEFAULT_DAILY_VOLUME_FACTORY, DEFAULT_TOTAL_VOLUME_FIELD, } from "../../helpers/getUniSubgraph" +import { Chain } from "@defillama/sdk/build/types"; +import { getBlock } from "@defillama/sdk/build/util/blocks"; +import { Balances } from "@defillama/sdk"; type TStartTime = { [key: string]: number; @@ -14,15 +17,16 @@ const startTimeV2: TStartTime = { [CHAIN.SCROLL]: 1714608000, } -const getBribes = async ({ fromTimestamp, toTimestamp, createBalances, getFromBlock, }: FetchOptions): Promise => { - const fromBlock = await getFromBlock() - const bribes = createBalances(); - const bribes_delta = createBalances(); - await fees_bribes(fromBlock, toTimestamp, bribes_delta); - await fees_bribes(fromBlock, fromTimestamp, bribes); +const getBribes = async (chain: Chain, timestamp: number): Promise => { + const fromTimestamp = timestamp - 24 * 60 * 60 + const fromBlock = await getBlock(chain, fromTimestamp) + const bribes_delta: Balances = new Balances({}) + const bribes: Balances = new Balances({}) + await fees_bribes(fromBlock.block, timestamp, bribes_delta); + await fees_bribes(fromBlock.block, fromTimestamp, bribes); bribes.subtract(bribes_delta); return { - timestamp: toTimestamp, + timestamp, dailyBribesRevenue: bribes, }; }; @@ -61,12 +65,11 @@ const methodology = { } const adapter: Adapter = { - version: 2, adapter: { [CHAIN.SCROLL]: { - fetch: async (options: FetchOptions) => { - const v2Result = await v2Graphs(CHAIN.SCROLL)(options) - const bribesResult = await getBribes(options); + fetch: async (timestamp, chainBlocks) => { + const v2Result = await v2Graphs(CHAIN.SCROLL)(timestamp, chainBlocks) + const bribesResult = await getBribes(CHAIN.SCROLL, timestamp); v2Result.dailyBribesRevenue = bribesResult.dailyBribesRevenue; return v2Result; diff --git a/fees/pharaoh-exchange.ts b/fees/pharaoh-exchange.ts index e8c81e0de9..f7581c334e 100644 --- a/fees/pharaoh-exchange.ts +++ b/fees/pharaoh-exchange.ts @@ -49,7 +49,6 @@ const methodology = { }; const adapter: SimpleAdapter = { - version: 2, adapter: { [CHAIN.AVAX]: { fetch: v2Graphs(AVAX), diff --git a/fees/quickswap.ts b/fees/quickswap.ts index 006bb0dfd5..e0f28e1d74 100644 --- a/fees/quickswap.ts +++ b/fees/quickswap.ts @@ -76,7 +76,6 @@ const methodology = { } const adapter: BreakdownAdapter = { - version: 2, breakdown: { v2: { [CHAIN.POLYGON]: { diff --git a/fees/ramses-exchange-v2/index.ts b/fees/ramses-exchange-v2/index.ts index 470ceb83be..330c5006e7 100644 --- a/fees/ramses-exchange-v2/index.ts +++ b/fees/ramses-exchange-v2/index.ts @@ -7,6 +7,8 @@ import { DEFAULT_DAILY_VOLUME_FACTORY, DEFAULT_TOTAL_VOLUME_FIELD, } from "../../helpers/getUniSubgraph" +import { Chain } from "@defillama/sdk/build/types"; +import { getBlock } from "@defillama/sdk/build/util/blocks"; type TStartTime = { [key: string]: number; @@ -15,15 +17,16 @@ const startTimeV2: TStartTime = { [CHAIN.ARBITRUM]: 1685574000, } -const getBribes = async ({ fromTimestamp, toTimestamp, createBalances, getFromBlock, }: FetchOptions): Promise => { - const fromBlock = await getFromBlock() - const bribes = createBalances(); - const bribes_delta = createBalances(); - await fees_bribes(fromBlock, toTimestamp, bribes_delta); - await fees_bribes(fromBlock, fromTimestamp, bribes); +const getBribes = async (chain: Chain, timestamp: number): Promise => { + const fromTimestamp = timestamp - 24 * 60 * 60 + const fromBlock = await getBlock(chain, fromTimestamp) + const bribes_delta: sdk.Balances = new sdk.Balances({}) + const bribes: sdk.Balances = new sdk.Balances({}) + await fees_bribes(fromBlock.block, timestamp, bribes_delta); + await fees_bribes(fromBlock.block, fromTimestamp, bribes); bribes.subtract(bribes_delta); return { - timestamp: toTimestamp, + timestamp, dailyBribesRevenue: bribes, }; }; @@ -62,12 +65,11 @@ const methodology = { } const adapter: Adapter = { - version: 2, adapter: { [CHAIN.ARBITRUM]: { - fetch: async (options: FetchOptions) => { - const v2Result = await v2Graphs(ARBITRUM)(options) - const bribesResult = await getBribes(options); + fetch: async (timestamp, chainBlocks) => { + const v2Result = await v2Graphs(ARBITRUM)(timestamp, chainBlocks) + const bribesResult = await getBribes(CHAIN.ARBITRUM, timestamp); v2Result.dailyBribesRevenue = bribesResult.dailyBribesRevenue; return v2Result; diff --git a/fees/zyberswap.ts b/fees/zyberswap.ts index f693284f26..c46d8e6cbd 100644 --- a/fees/zyberswap.ts +++ b/fees/zyberswap.ts @@ -108,7 +108,6 @@ const methodologyStable = { } const adapter: BreakdownAdapter = { - version: 2, breakdown: { v2: { [CHAIN.ARBITRUM]: { diff --git a/helpers/getUniSubgraph/index.ts b/helpers/getUniSubgraph/index.ts index 6a10e2aa29..4281002620 100644 --- a/helpers/getUniSubgraph/index.ts +++ b/helpers/getUniSubgraph/index.ts @@ -1,10 +1,11 @@ import { Chain } from "@defillama/sdk/build/general"; import { request, gql } from "graphql-request"; -import { BaseAdapter, FetchOptions, FetchResultGeneric, IJSON, SimpleAdapter } from "../../adapters/types"; +import { BaseAdapter, ChainBlocks, FetchOptions, FetchResultGeneric, IJSON, SimpleAdapter } from "../../adapters/types"; import { DEFAULT_DAILY_FEES_FACTORY, DEFAULT_DAILY_FEES_FIELD, DEFAULT_TOTAL_FEES_FACTORY, DEFAULT_TOTAL_FEES_FIELD } from "../getUniSubgraphFees"; import BigNumber from "bignumber.js"; import { getUniqStartOfTodayTimestamp, getUniswapDateId, handle200Errors } from "./utils"; import { getStartTimestamp } from "../getStartTimestamp"; +import { getBlock } from "../getBlock"; const DEFAULT_TOTAL_VOLUME_FACTORY = "uniswapFactories"; const DEFAULT_TOTAL_VOLUME_FIELD = "totalVolumeUSD"; @@ -182,16 +183,12 @@ function getGraphDimensions({ } ` : undefined; - return async (options: FetchOptions) => { - const { endTimestamp, getEndBlock } = options; - // ts-node --transpile-only cli/testAdapter.ts protocols uniswap - const customBlockFunc = getCustomBlock ? getCustomBlock : getEndBlock; - const block = - (await customBlockFunc(endTimestamp).catch((e: any) => - console.log(wrapGraphError(e).message), - )) ?? undefined; + return async (timestamp: number, chainBlocks: ChainBlocks) => { // Get params - const id = String(getUniswapDateId(new Date(endTimestamp * 1000))); + const id = String(getUniswapDateId(new Date(timestamp * 1000))); + const cleanTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)) + const customBlockFunc = getCustomBlock ? getCustomBlock : chainBlocks?.[chain] ? async (_: number) => chainBlocks[chain] : getBlock + const block = await customBlockFunc(timestamp, chain, chainBlocks).catch((e: any) => console.log(wrapGraphError(e).message)) ?? undefined // Execute queries // DAILY VOLUME let graphResDailyVolume; @@ -202,8 +199,8 @@ function getGraphDimensions({ graphUrls[chain], dailyVolumePairsQuery, { - timestamp_gt: endTimestamp - 3600 * 24, - timestamp_lte: endTimestamp, + timestamp_gt: cleanTimestamp - 3600 * 24, + timestamp_lte: cleanTimestamp, }, graphRequestHeaders?.[chain], ) @@ -234,7 +231,7 @@ function getGraphDimensions({ dailyVolume = graphResDailyVolume?.[graphFieldsDailyVolume.factory]?.[graphFieldsDailyVolume.field] if (!graphResDailyVolume || !dailyVolume) { console.info("Attempting with alternative query...") - graphResDailyVolume = await request(graphUrls[chain], alternativeDailyQuery, { timestamp: getUniqStartOfTodayTimestamp(new Date(endTimestamp * 1000)) }, graphRequestHeaders?.[chain]).catch(handle200Errors).catch(e => console.error(`Failed to get alternative daily volume on ${chain} with graph ${graphUrls[chain]}: ${wrapGraphError(e).message}`)) + graphResDailyVolume = await request(graphUrls[chain], alternativeDailyQuery, { timestamp: getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)) }, graphRequestHeaders?.[chain]).catch(handle200Errors).catch(e => console.error(`Failed to get alternative daily volume on ${chain} with graph ${graphUrls[chain]}: ${wrapGraphError(e).message}`)) const factory = graphFieldsDailyVolume.factory.toLowerCase().charAt(graphFieldsDailyVolume.factory.length - 1) === 's' ? graphFieldsDailyVolume.factory : `${graphFieldsDailyVolume.factory}s` dailyVolume = graphResDailyVolume?.[factory].reduce((p: any, c: any) => p + Number(c[graphFieldsDailyVolume.field]), 0); } @@ -259,7 +256,7 @@ function getGraphDimensions({ const totalFees = graphResTotalFees?.[graphFieldsTotalFees.factory]?.reduce((total: number, factory: any) => total + Number(factory[graphFieldsTotalFees.field]), 0) const response: FetchResultGeneric = { - timestamp: endTimestamp, + timestamp, block, totalVolume, dailyVolume, diff --git a/helpers/getUniSubgraphVolume.ts b/helpers/getUniSubgraphVolume.ts index c1397e57b8..f3c4313f6a 100644 --- a/helpers/getUniSubgraphVolume.ts +++ b/helpers/getUniSubgraphVolume.ts @@ -93,13 +93,11 @@ function getChainVolume({ const graphQueryDailyVolume = gql`${hasDailyVolume ? `query get_daily_volume($id: Int) { ${dailyVolumeQuery} }` : ""}`; return (chain: Chain) => { - return async (options: FetchOptions) => { - const { endTimestamp, getEndBlock, getFromBlock, getToBlock } = options; - const customBlockFunc = getCustomBlock ? getCustomBlock : getEndBlock; - const block = (await customBlockFunc(endTimestamp).catch((e: any) => - console.log(wrapGraphError(e).message), - )) ?? undefined; - const id = getUniswapDateId(new Date(endTimestamp * 1000)); + return async (timestamp: number, chainBlocks: ChainBlocks) => { + const id = String(getUniswapDateId(new Date(timestamp * 1000))); + const customBlockFunc = getCustomBlock ? getCustomBlock : chainBlocks?.[chain] ? async (_: number) => chainBlocks[chain] : getBlock + const block = await customBlockFunc(timestamp, chain, chainBlocks).catch((e: any) => console.log(wrapGraphError(e).message)) ?? undefined + const graphResTotal = hasTotalVolume ? await request(graphUrls[chain], graphQueryTotalVolume, { block }).catch(e => { try { return JSON.parse(e.response.error).data @@ -116,7 +114,7 @@ function getChainVolume({ }) : undefined; let dailyVolumeValue = graphResDaily ? graphResDaily[dailyVolume.factory]?.[dailyVolume.field] : undefined if (hasDailyVolume && !dailyVolumeValue) { - graphResDaily = await request(graphUrls[chain], alternativeDaily(getUniqStartOfTodayTimestamp(new Date(endTimestamp * 1000)))).catch(e => { + graphResDaily = await request(graphUrls[chain], alternativeDaily(getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)))).catch(e => { try { return JSON.parse(e.response.error).data } catch (error) { @@ -127,21 +125,19 @@ function getChainVolume({ dailyVolumeValue = graphResDaily ? graphResDaily[`${factory}`].reduce((p: any, c: any) => p + Number(c[`${dailyVolume.field}`]), 0) : undefined; } if (!hasDailyVolume) { - const fromBlock = await getFromBlock() - const toBlock = await getToBlock(); - try { - const [yesterdayResult, todayResult] = await Promise.all([request(graphUrls[chain], graphQueryTotalVolume, { block: fromBlock }), request(graphUrls[chain], graphQueryTotalVolume, { block: toBlock })]) - const todayVolume = todayResult[totalVolume.factory].reduce((p: any, c: any) => p + Number(c[`${totalVolume.field}`]), 0) - const yesterdayVolume = yesterdayResult[totalVolume.factory].reduce((p: any, c: any) => p + Number(c[`${totalVolume.field}`]), 0) - const volume24H = todayVolume - yesterdayVolume; - dailyVolumeValue = volume24H; - } catch (e: any) { - console.error(`Failed to get daily volume via alternative query on ${graphUrls[chain]} ${chain}: ${wrapGraphError(e).message}`) - } + graphResDaily = await request(graphUrls[chain], alternativeDaily(getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)))).catch(e => { + try { + return JSON.parse(e.response.error).data + } catch (error) { + console.error(`Failed to get daily volume via alternative query on ${graphUrls[chain]} ${chain}: ${wrapGraphError(e).message}`) + } + }); + const factory = dailyVolume.factory.toLowerCase().charAt(dailyVolume.factory.length - 1) === 's' ? dailyVolume.factory : `${dailyVolume.factory}s` + dailyVolumeValue = graphResDaily ? graphResDaily[`${factory}`].reduce((p: any, c: any) => p + Number(c[`${dailyVolume.field}`]), 0) : undefined; } return { - timestamp: endTimestamp, + timestamp, block, totalVolume: graphResTotal ? graphResTotal[totalVolume.factory]?.reduce((total: number, factory: any) => total + Number(factory[totalVolume.field]), 0) : undefined, dailyVolume: dailyVolumeValue, @@ -169,14 +165,13 @@ function getChainVolumeWithGasToken({ }: IGetChainVolumeParams & {priceToken:string}) { const basic = getChainVolume({graphUrls, totalVolume, dailyVolume, customDailyVolume, hasDailyVolume, hasTotalVolume, getCustomBlock}) return (chain: Chain) => { - return async (options: FetchOptions) => { + return async (timestamp: number, chainBlocks: ChainBlocks) => { const { block, totalVolume, dailyVolume, - } = await basic(chain)(options); + } = await basic(chain)(timestamp, chainBlocks); - const timestamp = options.endTimestamp const balances = new Balances({ chain, timestamp }) balances.add(priceToken, Number(dailyVolume).toFixed(0), { skipChain: true }) diff --git a/protocols/pancakeswap/index.ts b/protocols/pancakeswap/index.ts index df3848e389..72d8e7b78e 100644 --- a/protocols/pancakeswap/index.ts +++ b/protocols/pancakeswap/index.ts @@ -247,16 +247,15 @@ const getSwapEvent = async (pool: any, fromTimestamp: number, toTimestamp: numbe const toUnixTime = (timestamp: string) => Number((Number(timestamp) / 1e6).toString().split('.')[0]) const adapter: BreakdownAdapter = { - version: 2, breakdown: { v1: { [DISABLED_ADAPTER_KEY]: disabledAdapter, [CHAIN.BSC]: { - fetch: async ({ startTimestamp }) => { + fetch: async (timestamp) => { const totalVolume = 103394400000; return { totalVolume: `${totalVolume}`, - timestamp: startTimestamp + timestamp } }, start: 1680307200, @@ -274,8 +273,8 @@ const adapter: BreakdownAdapter = { }, {} as BaseAdapter), v3: Object.keys(v3Endpoint).reduce((acc, chain) => { acc[chain] = { - fetch: async (options: FetchOptions) => { - const v3stats = await v3Graph(chain)(options) + fetch: async (timestamp, chainBlocks) => { + const v3stats = await v3Graph(chain)(timestamp, chainBlocks) if (chain === CHAIN.ETHEREUM) v3stats.totalVolume = (Number(v3stats.totalVolume) - 7385565913).toString() return v3stats }, diff --git a/protocols/smbswap/index.ts b/protocols/smbswap/index.ts index 770fbf195b..7aef2ff6e3 100644 --- a/protocols/smbswap/index.ts +++ b/protocols/smbswap/index.ts @@ -110,7 +110,6 @@ const methodology = { } const adapter: BreakdownAdapter = { - version: 2, breakdown: { v1: { [DISABLED_ADAPTER_KEY]: disabledAdapter, @@ -118,11 +117,12 @@ const adapter: BreakdownAdapter = { }, v2: { [CHAIN.BSC]: { - fetch: async (options: FetchOptions) => { - const volume = await graphs(CHAIN.BSC)(options) + fetch: async (timestamp, chainBlocks) => { + const volume = await graphs(CHAIN.BSC)(timestamp, chainBlocks) return { dailyFees: volume.dailyFees, dailyVolume: volume.dailyVolume, + timestamp } }, start: startTimes[CHAIN.BSC], diff --git a/protocols/uniswap/index.ts b/protocols/uniswap/index.ts index 1312f71932..becfef4538 100644 --- a/protocols/uniswap/index.ts +++ b/protocols/uniswap/index.ts @@ -229,21 +229,21 @@ const fetchV2 = async (options: FetchOptions) => { const adapter: BreakdownAdapter = { - version: 2, + version: 1, breakdown: { v1: { [CHAIN.ETHEREUM]: { - fetch: async (options) => { - const response = await v1Graph(options.chain)(options); - const keys = { - "dailyUserFees": options.createBalances(), - "dailyProtocolRevenue": options.createBalances(), - "dailySupplySideRevenue": options.createBalances(), - "dailyHoldersRevenue": options.createBalances(), - "dailyRevenue": options.createBalances(), - "dailyFees": options.createBalances(), - }; - for (const key of Object.keys(keys)) { + fetch: async (timestamp, chainBlocks) => { + const response = await v1Graph(CHAIN.ETHEREUM)(timestamp, chainBlocks); + const keys = [ + "dailyUserFees", + "dailyProtocolRevenue", + "dailySupplySideRevenue", + "dailyHoldersRevenue", + "dailyRevenue", + "dailyFees", + ]; + for (const key of keys) { if (typeof response[key] === 'string') { keys[key].add(ETH_ADDRESS, Number(response[key]) * 1e18); } @@ -258,8 +258,8 @@ const adapter: BreakdownAdapter = { }, v2: { [CHAIN.ETHEREUM]: { - fetch: async (options) => { - const response = await v2Graph(options.chain)(options); + fetch: async (timestamp, chainBlocks) => { + const response = await v2Graph(CHAIN.ETHEREUM)(timestamp, chainBlocks); response.totalVolume = Number(response.dailyVolume) + 1079453198606.2229; response.totalFees = Number(response.totalVolume) * 0.003; From 2bc4e8c526339631fbb62658219168995f122700 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Thu, 25 Jul 2024 18:29:30 +0100 Subject: [PATCH 101/105] Revert "v1 uni" This reverts commit 227df422aea4bcf5d6be47e2b7fcd533b8b275fa. --- dexs/ArbitrumExchange/index.ts | 1 + dexs/DerpDEX/index.ts | 2 +- dexs/SmarDex/index.ts | 2 +- dexs/agni-fi/index.ts | 1 + dexs/archly-finance/index.ts | 1 + dexs/baseswap/index.ts | 1 + dexs/beamswap-v3/index.ts | 1 + dexs/beamswap/index.ts | 1 + dexs/butterxyz/index.ts | 1 + dexs/dackieswap-v2/index.ts | 1 + dexs/dackieswap/index.ts | 1 + dexs/doveswap/index.ts | 1 + dexs/dragonswap/index.ts | 1 + dexs/firefly/index.ts | 1 + dexs/fusionx-v2/index.ts | 1 + dexs/fusionx-v3/index.ts | 1 + dexs/glyph-exchange/index.ts | 1 + dexs/horiza/index.ts | 1 + dexs/hydradex/index.ts | 1 + dexs/jswap/index.ts | 1 + dexs/kinetix-v3/index.ts | 1 + dexs/linehub-v3/index.ts | 1 + dexs/maia-v3/index.ts | 1 + dexs/metavault-v3/index.ts | 1 + dexs/miaswap/index.ts | 1 + dexs/monocerus/index.ts | 1 + dexs/nomiswap/index.ts | 5 ++-- dexs/quickswap/index.ts | 1 + dexs/retro/index.ts | 1 + dexs/shimmersea/index.ts | 1 + dexs/squadswap-v2/index.ts | 1 + dexs/squadswap-v3/index.ts | 1 + dexs/supswap-v2/index.ts | 1 + dexs/supswap-v3/index.ts | 1 + dexs/surfswap/index.ts | 1 + dexs/sushiswap/classic.ts | 4 ++-- dexs/swapbased/index.ts | 1 + dexs/tangleswap/index.ts | 1 + dexs/throne-v3/index.ts | 1 + dexs/xswap-protocol/index.ts | 1 + dexs/zkswap/index.ts | 8 ++++--- fees/ascent-v3.ts | 1 + fees/cleopatra-exchange.ts | 1 + fees/dragonswap/index.ts | 1 + fees/kyotoswap.ts | 1 + fees/nile-exchange/index.ts | 29 ++++++++++------------ fees/nuri-exchange-v2/index.ts | 29 ++++++++++------------ fees/pharaoh-exchange.ts | 1 + fees/quickswap.ts | 1 + fees/ramses-exchange-v2/index.ts | 24 +++++++++---------- fees/zyberswap.ts | 1 + helpers/getUniSubgraph/index.ts | 25 ++++++++++--------- helpers/getUniSubgraphVolume.ts | 41 ++++++++++++++++++-------------- protocols/pancakeswap/index.ts | 9 +++---- protocols/smbswap/index.ts | 6 ++--- protocols/uniswap/index.ts | 28 +++++++++++----------- 56 files changed, 151 insertions(+), 104 deletions(-) diff --git a/dexs/ArbitrumExchange/index.ts b/dexs/ArbitrumExchange/index.ts index 758d103522..53c1042e64 100644 --- a/dexs/ArbitrumExchange/index.ts +++ b/dexs/ArbitrumExchange/index.ts @@ -67,6 +67,7 @@ const startTimeV3:TStartTime = { [CHAIN.ARBITRUM]: 1683590400, } const adapter: BreakdownAdapter = { + version: 2, breakdown: { v2: { [CHAIN.ARBITRUM]: { diff --git a/dexs/DerpDEX/index.ts b/dexs/DerpDEX/index.ts index f05be439b4..f4dc81e508 100644 --- a/dexs/DerpDEX/index.ts +++ b/dexs/DerpDEX/index.ts @@ -42,7 +42,7 @@ const v3Graphs = getGraphDimensions({ }, }); -const adapter: Adapter = { adapter: {} }; +const adapter: Adapter = { adapter: {}, version: 2 }; Object.keys(endpoints).map((chain: string) => { adapter.adapter[chain] = { diff --git a/dexs/SmarDex/index.ts b/dexs/SmarDex/index.ts index 05f8db0527..7bc1ae13a0 100644 --- a/dexs/SmarDex/index.ts +++ b/dexs/SmarDex/index.ts @@ -66,7 +66,7 @@ const graphs = getGraphDimensions({ }, }); -const adapter: SimpleAdapter = { adapter: {} } +const adapter: SimpleAdapter = { adapter: {}, version: 2 } Object.keys(graphUrls).map((chain: string) => { adapter.adapter[chain] = { diff --git a/dexs/agni-fi/index.ts b/dexs/agni-fi/index.ts index 9fbfa25c80..9262673b16 100644 --- a/dexs/agni-fi/index.ts +++ b/dexs/agni-fi/index.ts @@ -34,6 +34,7 @@ const v3Graphs = getGraphDimensions({ }); const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.MANTLE]: { fetch: v3Graphs(CHAIN.MANTLE), diff --git a/dexs/archly-finance/index.ts b/dexs/archly-finance/index.ts index 755b578d01..e8b48b3d57 100644 --- a/dexs/archly-finance/index.ts +++ b/dexs/archly-finance/index.ts @@ -27,6 +27,7 @@ const graphFetch = getGraphDimensions({ }); const adapter: Adapter = { + version: 2, adapter: { [CHAIN.TELOS]: { fetch: graphFetch(CHAIN.TELOS), diff --git a/dexs/baseswap/index.ts b/dexs/baseswap/index.ts index efcebea6b2..e4b014d39c 100644 --- a/dexs/baseswap/index.ts +++ b/dexs/baseswap/index.ts @@ -79,6 +79,7 @@ const startTimeV3 = { }; const adapter: BreakdownAdapter = { + version: 2, breakdown: { v2: Object.keys(v2Endpoints).reduce((acc, chain) => { return { diff --git a/dexs/beamswap-v3/index.ts b/dexs/beamswap-v3/index.ts index f9a1905aa8..531c4f6ed6 100644 --- a/dexs/beamswap-v3/index.ts +++ b/dexs/beamswap-v3/index.ts @@ -40,6 +40,7 @@ const methodologyv3 = { }; const adapter: BreakdownAdapter = { + version: 2, breakdown: { v3: { [CHAIN.MOONBEAN]: { diff --git a/dexs/beamswap/index.ts b/dexs/beamswap/index.ts index e52323bf82..79edc89899 100644 --- a/dexs/beamswap/index.ts +++ b/dexs/beamswap/index.ts @@ -77,6 +77,7 @@ const methodologyStable = { }; const adapter: BreakdownAdapter = { + version: 2, breakdown: { classic: { [CHAIN.MOONBEAN]: { diff --git a/dexs/butterxyz/index.ts b/dexs/butterxyz/index.ts index a11ff6c622..793a5c8ea7 100644 --- a/dexs/butterxyz/index.ts +++ b/dexs/butterxyz/index.ts @@ -30,6 +30,7 @@ const dimensions = getGraphDimensions({ }); export default { + version: 2, adapter: { [CHAIN.MANTLE]: { fetch: dimensions(CHAIN.MANTLE), diff --git a/dexs/dackieswap-v2/index.ts b/dexs/dackieswap-v2/index.ts index 849acc869a..7d8aa9092a 100644 --- a/dexs/dackieswap-v2/index.ts +++ b/dexs/dackieswap-v2/index.ts @@ -44,6 +44,7 @@ const methodology = { }; const adapter: SimpleAdapter = { + version: 2, adapter: Object.keys(endpoints).reduce((acc, chain) => { return { ...acc, diff --git a/dexs/dackieswap/index.ts b/dexs/dackieswap/index.ts index dd87773d4b..981e9e22be 100644 --- a/dexs/dackieswap/index.ts +++ b/dexs/dackieswap/index.ts @@ -74,6 +74,7 @@ const adapter: SimpleAdapter = { start: async () => v3StartTimes[CHAIN.XLAYER] }, }, + version: 2 }; export default adapter; diff --git a/dexs/doveswap/index.ts b/dexs/doveswap/index.ts index 18be32c56f..266e95c726 100644 --- a/dexs/doveswap/index.ts +++ b/dexs/doveswap/index.ts @@ -55,6 +55,7 @@ const startTimeV3:TStartTime = { } const adapter: BreakdownAdapter = { + version: 2, breakdown: { v3: Object.keys(v3Endpoints).reduce((acc, chain) => { acc[chain] = { diff --git a/dexs/dragonswap/index.ts b/dexs/dragonswap/index.ts index 16dc59c4ee..9c86871dc5 100644 --- a/dexs/dragonswap/index.ts +++ b/dexs/dragonswap/index.ts @@ -73,6 +73,7 @@ const v3Graph = getGraphDimensions({ }); const adapter: BreakdownAdapter = { + version: 2, breakdown: { v2: Object.keys(endpoints).reduce((acc, chain) => { acc[chain] = { diff --git a/dexs/firefly/index.ts b/dexs/firefly/index.ts index 6206065e1d..e6d4232a20 100644 --- a/dexs/firefly/index.ts +++ b/dexs/firefly/index.ts @@ -46,6 +46,7 @@ const startTimeV3: TStartTime = { }; const adapter: BreakdownAdapter = { + version: 2, breakdown: { v3: Object.keys(v3Endpoints).reduce((acc, chain) => { acc[chain] = { diff --git a/dexs/fusionx-v2/index.ts b/dexs/fusionx-v2/index.ts index e871b210ef..0ec617436f 100644 --- a/dexs/fusionx-v2/index.ts +++ b/dexs/fusionx-v2/index.ts @@ -28,6 +28,7 @@ const v2Graphs = getGraphDimensions({ }); const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.MANTLE]: { fetch: v2Graphs(CHAIN.MANTLE), diff --git a/dexs/fusionx-v3/index.ts b/dexs/fusionx-v3/index.ts index 9cb028c967..de797f05fd 100644 --- a/dexs/fusionx-v3/index.ts +++ b/dexs/fusionx-v3/index.ts @@ -34,6 +34,7 @@ const v3Graphs = getGraphDimensions({ }); const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.MANTLE]: { fetch: v3Graphs(CHAIN.MANTLE), diff --git a/dexs/glyph-exchange/index.ts b/dexs/glyph-exchange/index.ts index 2750c71756..a181dd2080 100644 --- a/dexs/glyph-exchange/index.ts +++ b/dexs/glyph-exchange/index.ts @@ -60,6 +60,7 @@ const classic = Object.keys(endpointsClassic).reduce( ) as any; const adapter: BreakdownAdapter = { + version: 2, breakdown: { classic: classic, } diff --git a/dexs/horiza/index.ts b/dexs/horiza/index.ts index d84a44b2d6..ef1f305ec5 100644 --- a/dexs/horiza/index.ts +++ b/dexs/horiza/index.ts @@ -27,6 +27,7 @@ const v3Graphs = getGraphDimensions({ }); const adapters: SimpleAdapter = { + version: 2, adapter: { [CHAIN.ARBITRUM]: { fetch: v3Graphs(CHAIN.ARBITRUM), diff --git a/dexs/hydradex/index.ts b/dexs/hydradex/index.ts index 0ec74827f5..d1595ba26b 100644 --- a/dexs/hydradex/index.ts +++ b/dexs/hydradex/index.ts @@ -118,6 +118,7 @@ const methodology = { }; const adapter: BreakdownAdapter = { + version: 2, breakdown: { v2: { [DISABLED_ADAPTER_KEY]: disabledAdapter, diff --git a/dexs/jswap/index.ts b/dexs/jswap/index.ts index 303d9a80a7..9048810a9f 100644 --- a/dexs/jswap/index.ts +++ b/dexs/jswap/index.ts @@ -57,6 +57,7 @@ const graphs = getGraphDimensions({ }); const adapter: SimpleAdapter = { + version: 2, adapter: { [DISABLED_ADAPTER_KEY]: disabledAdapter, [CHAIN.OKEXCHAIN]: { diff --git a/dexs/kinetix-v3/index.ts b/dexs/kinetix-v3/index.ts index 134e4738bb..99c3aa610a 100644 --- a/dexs/kinetix-v3/index.ts +++ b/dexs/kinetix-v3/index.ts @@ -58,6 +58,7 @@ const v3 = Object.keys(endpointsV3).reduce( ); const adapter: BreakdownAdapter = { + version: 2, breakdown: { v3: v3, }, diff --git a/dexs/linehub-v3/index.ts b/dexs/linehub-v3/index.ts index 7694a62147..252de64626 100644 --- a/dexs/linehub-v3/index.ts +++ b/dexs/linehub-v3/index.ts @@ -55,6 +55,7 @@ const v3 = Object.keys(endpointsV3).reduce( ); const adapter: BreakdownAdapter = { + version: 2, breakdown: { v3: v3, }, diff --git a/dexs/maia-v3/index.ts b/dexs/maia-v3/index.ts index 85ade78b31..3f378c053a 100644 --- a/dexs/maia-v3/index.ts +++ b/dexs/maia-v3/index.ts @@ -42,6 +42,7 @@ const methodology = { } const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.METIS]: { fetch: v3Graphs(CHAIN.METIS), diff --git a/dexs/metavault-v3/index.ts b/dexs/metavault-v3/index.ts index 0ce88b4093..bf5329928c 100644 --- a/dexs/metavault-v3/index.ts +++ b/dexs/metavault-v3/index.ts @@ -56,6 +56,7 @@ const v3 = Object.keys(endpointsV3).reduce( ); const adapter: BreakdownAdapter = { + version: 2, breakdown: { v3: v3, }, diff --git a/dexs/miaswap/index.ts b/dexs/miaswap/index.ts index 4740724a04..d726bb852d 100644 --- a/dexs/miaswap/index.ts +++ b/dexs/miaswap/index.ts @@ -35,6 +35,7 @@ const v3Graphs = getGraphDimensions({ }); const adapter: SimpleAdapter = { + version: 2, adapter: { [DISABLED_ADAPTER_KEY]: disabledAdapter, [CHAIN.ONUS]: { diff --git a/dexs/monocerus/index.ts b/dexs/monocerus/index.ts index 3d5e9b6420..3b5b4ec443 100644 --- a/dexs/monocerus/index.ts +++ b/dexs/monocerus/index.ts @@ -33,6 +33,7 @@ const v3Graphs = getGraphDimensions({ }); const adapter: Adapter = { + version: 2, adapter: { [DISABLED_ADAPTER_KEY]: disabledAdapter, [CHAIN.MANTA]: { diff --git a/dexs/nomiswap/index.ts b/dexs/nomiswap/index.ts index d5ec58f8bd..52e6f2605b 100644 --- a/dexs/nomiswap/index.ts +++ b/dexs/nomiswap/index.ts @@ -29,10 +29,11 @@ const graphsClassic = getGraphDimensions({ }); const adapters: SimpleAdapter = { + version: 2, adapter: { [CHAIN.BSC]: { - fetch: async (timestamp, chainBlocks) => { - const data = await graphsClassic(CHAIN.BSC)(timestamp, chainBlocks); + fetch: async (options: FetchOptions) => { + const data = await graphsClassic(CHAIN.BSC)(options); const removeSpike = Number(data.totalVolume) - 7035654137.527446631277942307129497; data.totalVolume = removeSpike > 0 ? removeSpike : data.totalVolume; return { diff --git a/dexs/quickswap/index.ts b/dexs/quickswap/index.ts index b049764625..df845cb1f8 100644 --- a/dexs/quickswap/index.ts +++ b/dexs/quickswap/index.ts @@ -86,6 +86,7 @@ const fetchLiquidityHub = async (timestamp: number) => { const adapter: BreakdownAdapter = { + version: 2, breakdown: { v2: { [CHAIN.POLYGON]: { diff --git a/dexs/retro/index.ts b/dexs/retro/index.ts index d6234ae666..b3f140b2fc 100644 --- a/dexs/retro/index.ts +++ b/dexs/retro/index.ts @@ -28,6 +28,7 @@ const v3Graphs = getGraphDimensions({ }); const adapters: SimpleAdapter = { + version: 2, adapter: { [CHAIN.POLYGON]: { fetch: v3Graphs(CHAIN.POLYGON), diff --git a/dexs/shimmersea/index.ts b/dexs/shimmersea/index.ts index 425c1a958e..706467e701 100644 --- a/dexs/shimmersea/index.ts +++ b/dexs/shimmersea/index.ts @@ -27,6 +27,7 @@ const v3Graphs = getGraphDimensions({ }); const adapter: SimpleAdapter = { + version: 2, adapter: Object.keys(v3Endpoints).reduce((acc, chain) => { return { ...acc, diff --git a/dexs/squadswap-v2/index.ts b/dexs/squadswap-v2/index.ts index 7a0f450983..55579b1da3 100644 --- a/dexs/squadswap-v2/index.ts +++ b/dexs/squadswap-v2/index.ts @@ -30,6 +30,7 @@ const v2Graph = getGraphDimensions({ }); const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.BSC]: { fetch: v2Graph(CHAIN.BSC), diff --git a/dexs/squadswap-v3/index.ts b/dexs/squadswap-v3/index.ts index 534dfab7f6..0ea3735659 100644 --- a/dexs/squadswap-v3/index.ts +++ b/dexs/squadswap-v3/index.ts @@ -34,6 +34,7 @@ const v3Graphs = getGraphDimensions({ }); const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.BSC]: { fetch: v3Graphs(CHAIN.BSC), diff --git a/dexs/supswap-v2/index.ts b/dexs/supswap-v2/index.ts index 7efae4a30f..4642869cf6 100644 --- a/dexs/supswap-v2/index.ts +++ b/dexs/supswap-v2/index.ts @@ -28,6 +28,7 @@ const v2Graphs = getGraphDimensions({ }); const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.MODE]: { fetch: v2Graphs(CHAIN.MODE), diff --git a/dexs/supswap-v3/index.ts b/dexs/supswap-v3/index.ts index d09a6cb0f7..1d0569a1bf 100644 --- a/dexs/supswap-v3/index.ts +++ b/dexs/supswap-v3/index.ts @@ -34,6 +34,7 @@ const v3Graphs = getGraphDimensions({ }); const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.MODE]: { fetch: v3Graphs(CHAIN.MODE), diff --git a/dexs/surfswap/index.ts b/dexs/surfswap/index.ts index 661b7f624a..ad2dccdb8e 100644 --- a/dexs/surfswap/index.ts +++ b/dexs/surfswap/index.ts @@ -67,6 +67,7 @@ const v1graphs = getGraphDimensions({ }); const adapter: BreakdownAdapter = { + version: 2, breakdown: { classic: { [CHAIN.KAVA]: { diff --git a/dexs/sushiswap/classic.ts b/dexs/sushiswap/classic.ts index 3bba28e741..df4c746801 100644 --- a/dexs/sushiswap/classic.ts +++ b/dexs/sushiswap/classic.ts @@ -154,8 +154,8 @@ const fantomGraphs = getChainVolumeWithGasToken({ priceToken: "coingecko:fantom" } as any); classic[CHAIN.FANTOM] = { - fetch: async (timestamp, chainBlocks) => { - const values = await fantomGraphs(CHAIN.FANTOM)(timestamp, chainBlocks); + fetch: async (options: FetchOptions) => { + const values = await fantomGraphs(CHAIN.FANTOM)(options); const vol = Number(values.dailyVolume) return { ...values, diff --git a/dexs/swapbased/index.ts b/dexs/swapbased/index.ts index 0bbfeb46cb..58fddaa849 100644 --- a/dexs/swapbased/index.ts +++ b/dexs/swapbased/index.ts @@ -191,6 +191,7 @@ const getFetch = }; const adapter: BreakdownAdapter = { + version: 2, breakdown: { v2: { [CHAIN.BASE]: { diff --git a/dexs/tangleswap/index.ts b/dexs/tangleswap/index.ts index d4bb141392..6354b59383 100644 --- a/dexs/tangleswap/index.ts +++ b/dexs/tangleswap/index.ts @@ -24,6 +24,7 @@ const v3Graphs = getGraphDimensions({ }); const adapter: SimpleAdapter = { + version: 2, adapter: Object.keys(v3Endpoints).reduce((acc, chain) => { return { ...acc, diff --git a/dexs/throne-v3/index.ts b/dexs/throne-v3/index.ts index 9ca829ca97..619672e576 100644 --- a/dexs/throne-v3/index.ts +++ b/dexs/throne-v3/index.ts @@ -34,6 +34,7 @@ const v3StartTimes = { } as IJSON; const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.BASE]: { fetch: v3Graph(CHAIN.BASE), diff --git a/dexs/xswap-protocol/index.ts b/dexs/xswap-protocol/index.ts index f00e3083c6..6daa99921a 100644 --- a/dexs/xswap-protocol/index.ts +++ b/dexs/xswap-protocol/index.ts @@ -17,6 +17,7 @@ const graphs = getGraphDimensions({ }); const adapters: SimpleAdapter = { + version: 2, adapter: { [CHAIN.XDC]: { fetch: graphs(CHAIN.XDC), diff --git a/dexs/zkswap/index.ts b/dexs/zkswap/index.ts index 94fb4129cd..7ab3d543b8 100644 --- a/dexs/zkswap/index.ts +++ b/dexs/zkswap/index.ts @@ -1,4 +1,5 @@ -import { SimpleAdapter } from "../../adapters/types"; +import { time } from "console"; +import { FetchOptions, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { getGraphDimensions } from "../../helpers/getUniSubgraph"; @@ -26,10 +27,11 @@ const graph = getGraphDimensions({ }); const adapters: SimpleAdapter = { + version: 2, adapter: { [CHAIN.ERA]: { - fetch: async (timestamp, chainBlocks) => { - const data = await graph(CHAIN.ERA)(timestamp, chainBlocks); + fetch: async (options: FetchOptions) => { + const data = await graph(CHAIN.ERA)(options); data.totalVolume = undefined; return { ...data diff --git a/fees/ascent-v3.ts b/fees/ascent-v3.ts index 8a80a3c633..1d26faf801 100644 --- a/fees/ascent-v3.ts +++ b/fees/ascent-v3.ts @@ -45,6 +45,7 @@ const v3Graphs = getGraphDimensions({ }); const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.EON]: { fetch: v3Graphs(CHAIN.EON), diff --git a/fees/cleopatra-exchange.ts b/fees/cleopatra-exchange.ts index e22c0f2f13..de80206631 100644 --- a/fees/cleopatra-exchange.ts +++ b/fees/cleopatra-exchange.ts @@ -48,6 +48,7 @@ const methodology = { }; const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.MANTLE]: { fetch: v2Graphs(MANTLE), diff --git a/fees/dragonswap/index.ts b/fees/dragonswap/index.ts index b0b8dfec39..9648b3661c 100644 --- a/fees/dragonswap/index.ts +++ b/fees/dragonswap/index.ts @@ -73,6 +73,7 @@ const v3Graph = getGraphDimensions({ }); const adapter: BreakdownAdapter = { + version: 2, breakdown: { v2: Object.keys(endpoints).reduce((acc, chain) => { acc[chain] = { diff --git a/fees/kyotoswap.ts b/fees/kyotoswap.ts index 4954f402dd..15ef9b3f38 100644 --- a/fees/kyotoswap.ts +++ b/fees/kyotoswap.ts @@ -47,6 +47,7 @@ const methodology = { }; const adapter: Adapter = { + version: 2, adapter: Object.keys(endpoints).reduce((acc, chain) => { acc[chain] = { fetch: graphs(chain as Chain), diff --git a/fees/nile-exchange/index.ts b/fees/nile-exchange/index.ts index 8348675ebb..ea38c99ce3 100644 --- a/fees/nile-exchange/index.ts +++ b/fees/nile-exchange/index.ts @@ -1,14 +1,11 @@ -import { Adapter } from "../../adapters/types"; -import { CHAIN } from "../../helpers/chains"; +import { Adapter, FetchOptions } from "../../adapters/types"; +import { ARBITRUM, CHAIN } from "../../helpers/chains"; import { fees_bribes } from './bribes'; import { getGraphDimensions, DEFAULT_DAILY_VOLUME_FACTORY, DEFAULT_TOTAL_VOLUME_FIELD, } from "../../helpers/getUniSubgraph" -import { getBlock } from "@defillama/sdk/build/util/blocks"; -import { Chain } from "@defillama/sdk/build/types"; -import { Balances } from "@defillama/sdk"; type TStartTime = { [key: string]: number; @@ -17,16 +14,15 @@ const startTimeV2: TStartTime = { [CHAIN.LINEA]: 1705968000, } -const getBribes = async (chain: Chain, timestamp: number): Promise => { - const fromTimestamp = timestamp - 24 * 60 * 60 - const fromBlock = await getBlock(chain, fromTimestamp) - const bribes_delta: Balances = new Balances({}) - const bribes: Balances = new Balances({}) - await fees_bribes(fromBlock.block, timestamp, bribes_delta); - await fees_bribes(fromBlock.block, fromTimestamp, bribes); +const getBribes = async ({ fromTimestamp, toTimestamp, createBalances, getFromBlock, }: FetchOptions): Promise => { + const fromBlock = await getFromBlock() + const bribes = createBalances(); + const bribes_delta = createBalances(); + await fees_bribes(fromBlock, toTimestamp, bribes_delta); + await fees_bribes(fromBlock, fromTimestamp, bribes); bribes.subtract(bribes_delta); return { - timestamp, + timestamp: toTimestamp, dailyBribesRevenue: bribes, }; }; @@ -65,11 +61,12 @@ const methodology = { } const adapter: Adapter = { + version: 2, adapter: { [CHAIN.LINEA]: { - fetch: async (timestamp, chainBlocks) => { - const v2Result = await v2Graphs(CHAIN.LINEA)(timestamp, chainBlocks) - const bribesResult = await getBribes(CHAIN.LINEA, timestamp); + fetch: async (options: FetchOptions) => { + const v2Result = await v2Graphs(CHAIN.LINEA)(options) + const bribesResult = await getBribes(options); v2Result.dailyBribesRevenue = bribesResult.dailyBribesRevenue; return v2Result; diff --git a/fees/nuri-exchange-v2/index.ts b/fees/nuri-exchange-v2/index.ts index 71fd360669..ace7747bcb 100644 --- a/fees/nuri-exchange-v2/index.ts +++ b/fees/nuri-exchange-v2/index.ts @@ -1,14 +1,11 @@ -import { Adapter } from "../../adapters/types"; -import { CHAIN } from "../../helpers/chains"; +import { Adapter, FetchOptions } from "../../adapters/types"; +import { ARBITRUM, CHAIN } from "../../helpers/chains"; import { fees_bribes } from './bribes'; import { getGraphDimensions, DEFAULT_DAILY_VOLUME_FACTORY, DEFAULT_TOTAL_VOLUME_FIELD, } from "../../helpers/getUniSubgraph" -import { Chain } from "@defillama/sdk/build/types"; -import { getBlock } from "@defillama/sdk/build/util/blocks"; -import { Balances } from "@defillama/sdk"; type TStartTime = { [key: string]: number; @@ -17,16 +14,15 @@ const startTimeV2: TStartTime = { [CHAIN.SCROLL]: 1714608000, } -const getBribes = async (chain: Chain, timestamp: number): Promise => { - const fromTimestamp = timestamp - 24 * 60 * 60 - const fromBlock = await getBlock(chain, fromTimestamp) - const bribes_delta: Balances = new Balances({}) - const bribes: Balances = new Balances({}) - await fees_bribes(fromBlock.block, timestamp, bribes_delta); - await fees_bribes(fromBlock.block, fromTimestamp, bribes); +const getBribes = async ({ fromTimestamp, toTimestamp, createBalances, getFromBlock, }: FetchOptions): Promise => { + const fromBlock = await getFromBlock() + const bribes = createBalances(); + const bribes_delta = createBalances(); + await fees_bribes(fromBlock, toTimestamp, bribes_delta); + await fees_bribes(fromBlock, fromTimestamp, bribes); bribes.subtract(bribes_delta); return { - timestamp, + timestamp: toTimestamp, dailyBribesRevenue: bribes, }; }; @@ -65,11 +61,12 @@ const methodology = { } const adapter: Adapter = { + version: 2, adapter: { [CHAIN.SCROLL]: { - fetch: async (timestamp, chainBlocks) => { - const v2Result = await v2Graphs(CHAIN.SCROLL)(timestamp, chainBlocks) - const bribesResult = await getBribes(CHAIN.SCROLL, timestamp); + fetch: async (options: FetchOptions) => { + const v2Result = await v2Graphs(CHAIN.SCROLL)(options) + const bribesResult = await getBribes(options); v2Result.dailyBribesRevenue = bribesResult.dailyBribesRevenue; return v2Result; diff --git a/fees/pharaoh-exchange.ts b/fees/pharaoh-exchange.ts index f7581c334e..e8c81e0de9 100644 --- a/fees/pharaoh-exchange.ts +++ b/fees/pharaoh-exchange.ts @@ -49,6 +49,7 @@ const methodology = { }; const adapter: SimpleAdapter = { + version: 2, adapter: { [CHAIN.AVAX]: { fetch: v2Graphs(AVAX), diff --git a/fees/quickswap.ts b/fees/quickswap.ts index e0f28e1d74..006bb0dfd5 100644 --- a/fees/quickswap.ts +++ b/fees/quickswap.ts @@ -76,6 +76,7 @@ const methodology = { } const adapter: BreakdownAdapter = { + version: 2, breakdown: { v2: { [CHAIN.POLYGON]: { diff --git a/fees/ramses-exchange-v2/index.ts b/fees/ramses-exchange-v2/index.ts index 330c5006e7..470ceb83be 100644 --- a/fees/ramses-exchange-v2/index.ts +++ b/fees/ramses-exchange-v2/index.ts @@ -7,8 +7,6 @@ import { DEFAULT_DAILY_VOLUME_FACTORY, DEFAULT_TOTAL_VOLUME_FIELD, } from "../../helpers/getUniSubgraph" -import { Chain } from "@defillama/sdk/build/types"; -import { getBlock } from "@defillama/sdk/build/util/blocks"; type TStartTime = { [key: string]: number; @@ -17,16 +15,15 @@ const startTimeV2: TStartTime = { [CHAIN.ARBITRUM]: 1685574000, } -const getBribes = async (chain: Chain, timestamp: number): Promise => { - const fromTimestamp = timestamp - 24 * 60 * 60 - const fromBlock = await getBlock(chain, fromTimestamp) - const bribes_delta: sdk.Balances = new sdk.Balances({}) - const bribes: sdk.Balances = new sdk.Balances({}) - await fees_bribes(fromBlock.block, timestamp, bribes_delta); - await fees_bribes(fromBlock.block, fromTimestamp, bribes); +const getBribes = async ({ fromTimestamp, toTimestamp, createBalances, getFromBlock, }: FetchOptions): Promise => { + const fromBlock = await getFromBlock() + const bribes = createBalances(); + const bribes_delta = createBalances(); + await fees_bribes(fromBlock, toTimestamp, bribes_delta); + await fees_bribes(fromBlock, fromTimestamp, bribes); bribes.subtract(bribes_delta); return { - timestamp, + timestamp: toTimestamp, dailyBribesRevenue: bribes, }; }; @@ -65,11 +62,12 @@ const methodology = { } const adapter: Adapter = { + version: 2, adapter: { [CHAIN.ARBITRUM]: { - fetch: async (timestamp, chainBlocks) => { - const v2Result = await v2Graphs(ARBITRUM)(timestamp, chainBlocks) - const bribesResult = await getBribes(CHAIN.ARBITRUM, timestamp); + fetch: async (options: FetchOptions) => { + const v2Result = await v2Graphs(ARBITRUM)(options) + const bribesResult = await getBribes(options); v2Result.dailyBribesRevenue = bribesResult.dailyBribesRevenue; return v2Result; diff --git a/fees/zyberswap.ts b/fees/zyberswap.ts index c46d8e6cbd..f693284f26 100644 --- a/fees/zyberswap.ts +++ b/fees/zyberswap.ts @@ -108,6 +108,7 @@ const methodologyStable = { } const adapter: BreakdownAdapter = { + version: 2, breakdown: { v2: { [CHAIN.ARBITRUM]: { diff --git a/helpers/getUniSubgraph/index.ts b/helpers/getUniSubgraph/index.ts index 4281002620..6a10e2aa29 100644 --- a/helpers/getUniSubgraph/index.ts +++ b/helpers/getUniSubgraph/index.ts @@ -1,11 +1,10 @@ import { Chain } from "@defillama/sdk/build/general"; import { request, gql } from "graphql-request"; -import { BaseAdapter, ChainBlocks, FetchOptions, FetchResultGeneric, IJSON, SimpleAdapter } from "../../adapters/types"; +import { BaseAdapter, FetchOptions, FetchResultGeneric, IJSON, SimpleAdapter } from "../../adapters/types"; import { DEFAULT_DAILY_FEES_FACTORY, DEFAULT_DAILY_FEES_FIELD, DEFAULT_TOTAL_FEES_FACTORY, DEFAULT_TOTAL_FEES_FIELD } from "../getUniSubgraphFees"; import BigNumber from "bignumber.js"; import { getUniqStartOfTodayTimestamp, getUniswapDateId, handle200Errors } from "./utils"; import { getStartTimestamp } from "../getStartTimestamp"; -import { getBlock } from "../getBlock"; const DEFAULT_TOTAL_VOLUME_FACTORY = "uniswapFactories"; const DEFAULT_TOTAL_VOLUME_FIELD = "totalVolumeUSD"; @@ -183,12 +182,16 @@ function getGraphDimensions({ } ` : undefined; - return async (timestamp: number, chainBlocks: ChainBlocks) => { + return async (options: FetchOptions) => { + const { endTimestamp, getEndBlock } = options; + // ts-node --transpile-only cli/testAdapter.ts protocols uniswap + const customBlockFunc = getCustomBlock ? getCustomBlock : getEndBlock; + const block = + (await customBlockFunc(endTimestamp).catch((e: any) => + console.log(wrapGraphError(e).message), + )) ?? undefined; // Get params - const id = String(getUniswapDateId(new Date(timestamp * 1000))); - const cleanTimestamp = getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)) - const customBlockFunc = getCustomBlock ? getCustomBlock : chainBlocks?.[chain] ? async (_: number) => chainBlocks[chain] : getBlock - const block = await customBlockFunc(timestamp, chain, chainBlocks).catch((e: any) => console.log(wrapGraphError(e).message)) ?? undefined + const id = String(getUniswapDateId(new Date(endTimestamp * 1000))); // Execute queries // DAILY VOLUME let graphResDailyVolume; @@ -199,8 +202,8 @@ function getGraphDimensions({ graphUrls[chain], dailyVolumePairsQuery, { - timestamp_gt: cleanTimestamp - 3600 * 24, - timestamp_lte: cleanTimestamp, + timestamp_gt: endTimestamp - 3600 * 24, + timestamp_lte: endTimestamp, }, graphRequestHeaders?.[chain], ) @@ -231,7 +234,7 @@ function getGraphDimensions({ dailyVolume = graphResDailyVolume?.[graphFieldsDailyVolume.factory]?.[graphFieldsDailyVolume.field] if (!graphResDailyVolume || !dailyVolume) { console.info("Attempting with alternative query...") - graphResDailyVolume = await request(graphUrls[chain], alternativeDailyQuery, { timestamp: getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)) }, graphRequestHeaders?.[chain]).catch(handle200Errors).catch(e => console.error(`Failed to get alternative daily volume on ${chain} with graph ${graphUrls[chain]}: ${wrapGraphError(e).message}`)) + graphResDailyVolume = await request(graphUrls[chain], alternativeDailyQuery, { timestamp: getUniqStartOfTodayTimestamp(new Date(endTimestamp * 1000)) }, graphRequestHeaders?.[chain]).catch(handle200Errors).catch(e => console.error(`Failed to get alternative daily volume on ${chain} with graph ${graphUrls[chain]}: ${wrapGraphError(e).message}`)) const factory = graphFieldsDailyVolume.factory.toLowerCase().charAt(graphFieldsDailyVolume.factory.length - 1) === 's' ? graphFieldsDailyVolume.factory : `${graphFieldsDailyVolume.factory}s` dailyVolume = graphResDailyVolume?.[factory].reduce((p: any, c: any) => p + Number(c[graphFieldsDailyVolume.field]), 0); } @@ -256,7 +259,7 @@ function getGraphDimensions({ const totalFees = graphResTotalFees?.[graphFieldsTotalFees.factory]?.reduce((total: number, factory: any) => total + Number(factory[graphFieldsTotalFees.field]), 0) const response: FetchResultGeneric = { - timestamp, + timestamp: endTimestamp, block, totalVolume, dailyVolume, diff --git a/helpers/getUniSubgraphVolume.ts b/helpers/getUniSubgraphVolume.ts index f3c4313f6a..c1397e57b8 100644 --- a/helpers/getUniSubgraphVolume.ts +++ b/helpers/getUniSubgraphVolume.ts @@ -93,11 +93,13 @@ function getChainVolume({ const graphQueryDailyVolume = gql`${hasDailyVolume ? `query get_daily_volume($id: Int) { ${dailyVolumeQuery} }` : ""}`; return (chain: Chain) => { - return async (timestamp: number, chainBlocks: ChainBlocks) => { - const id = String(getUniswapDateId(new Date(timestamp * 1000))); - const customBlockFunc = getCustomBlock ? getCustomBlock : chainBlocks?.[chain] ? async (_: number) => chainBlocks[chain] : getBlock - const block = await customBlockFunc(timestamp, chain, chainBlocks).catch((e: any) => console.log(wrapGraphError(e).message)) ?? undefined - + return async (options: FetchOptions) => { + const { endTimestamp, getEndBlock, getFromBlock, getToBlock } = options; + const customBlockFunc = getCustomBlock ? getCustomBlock : getEndBlock; + const block = (await customBlockFunc(endTimestamp).catch((e: any) => + console.log(wrapGraphError(e).message), + )) ?? undefined; + const id = getUniswapDateId(new Date(endTimestamp * 1000)); const graphResTotal = hasTotalVolume ? await request(graphUrls[chain], graphQueryTotalVolume, { block }).catch(e => { try { return JSON.parse(e.response.error).data @@ -114,7 +116,7 @@ function getChainVolume({ }) : undefined; let dailyVolumeValue = graphResDaily ? graphResDaily[dailyVolume.factory]?.[dailyVolume.field] : undefined if (hasDailyVolume && !dailyVolumeValue) { - graphResDaily = await request(graphUrls[chain], alternativeDaily(getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)))).catch(e => { + graphResDaily = await request(graphUrls[chain], alternativeDaily(getUniqStartOfTodayTimestamp(new Date(endTimestamp * 1000)))).catch(e => { try { return JSON.parse(e.response.error).data } catch (error) { @@ -125,19 +127,21 @@ function getChainVolume({ dailyVolumeValue = graphResDaily ? graphResDaily[`${factory}`].reduce((p: any, c: any) => p + Number(c[`${dailyVolume.field}`]), 0) : undefined; } if (!hasDailyVolume) { - graphResDaily = await request(graphUrls[chain], alternativeDaily(getUniqStartOfTodayTimestamp(new Date(timestamp * 1000)))).catch(e => { - try { - return JSON.parse(e.response.error).data - } catch (error) { - console.error(`Failed to get daily volume via alternative query on ${graphUrls[chain]} ${chain}: ${wrapGraphError(e).message}`) - } - }); - const factory = dailyVolume.factory.toLowerCase().charAt(dailyVolume.factory.length - 1) === 's' ? dailyVolume.factory : `${dailyVolume.factory}s` - dailyVolumeValue = graphResDaily ? graphResDaily[`${factory}`].reduce((p: any, c: any) => p + Number(c[`${dailyVolume.field}`]), 0) : undefined; + const fromBlock = await getFromBlock() + const toBlock = await getToBlock(); + try { + const [yesterdayResult, todayResult] = await Promise.all([request(graphUrls[chain], graphQueryTotalVolume, { block: fromBlock }), request(graphUrls[chain], graphQueryTotalVolume, { block: toBlock })]) + const todayVolume = todayResult[totalVolume.factory].reduce((p: any, c: any) => p + Number(c[`${totalVolume.field}`]), 0) + const yesterdayVolume = yesterdayResult[totalVolume.factory].reduce((p: any, c: any) => p + Number(c[`${totalVolume.field}`]), 0) + const volume24H = todayVolume - yesterdayVolume; + dailyVolumeValue = volume24H; + } catch (e: any) { + console.error(`Failed to get daily volume via alternative query on ${graphUrls[chain]} ${chain}: ${wrapGraphError(e).message}`) + } } return { - timestamp, + timestamp: endTimestamp, block, totalVolume: graphResTotal ? graphResTotal[totalVolume.factory]?.reduce((total: number, factory: any) => total + Number(factory[totalVolume.field]), 0) : undefined, dailyVolume: dailyVolumeValue, @@ -165,13 +169,14 @@ function getChainVolumeWithGasToken({ }: IGetChainVolumeParams & {priceToken:string}) { const basic = getChainVolume({graphUrls, totalVolume, dailyVolume, customDailyVolume, hasDailyVolume, hasTotalVolume, getCustomBlock}) return (chain: Chain) => { - return async (timestamp: number, chainBlocks: ChainBlocks) => { + return async (options: FetchOptions) => { const { block, totalVolume, dailyVolume, - } = await basic(chain)(timestamp, chainBlocks); + } = await basic(chain)(options); + const timestamp = options.endTimestamp const balances = new Balances({ chain, timestamp }) balances.add(priceToken, Number(dailyVolume).toFixed(0), { skipChain: true }) diff --git a/protocols/pancakeswap/index.ts b/protocols/pancakeswap/index.ts index 72d8e7b78e..df3848e389 100644 --- a/protocols/pancakeswap/index.ts +++ b/protocols/pancakeswap/index.ts @@ -247,15 +247,16 @@ const getSwapEvent = async (pool: any, fromTimestamp: number, toTimestamp: numbe const toUnixTime = (timestamp: string) => Number((Number(timestamp) / 1e6).toString().split('.')[0]) const adapter: BreakdownAdapter = { + version: 2, breakdown: { v1: { [DISABLED_ADAPTER_KEY]: disabledAdapter, [CHAIN.BSC]: { - fetch: async (timestamp) => { + fetch: async ({ startTimestamp }) => { const totalVolume = 103394400000; return { totalVolume: `${totalVolume}`, - timestamp + timestamp: startTimestamp } }, start: 1680307200, @@ -273,8 +274,8 @@ const adapter: BreakdownAdapter = { }, {} as BaseAdapter), v3: Object.keys(v3Endpoint).reduce((acc, chain) => { acc[chain] = { - fetch: async (timestamp, chainBlocks) => { - const v3stats = await v3Graph(chain)(timestamp, chainBlocks) + fetch: async (options: FetchOptions) => { + const v3stats = await v3Graph(chain)(options) if (chain === CHAIN.ETHEREUM) v3stats.totalVolume = (Number(v3stats.totalVolume) - 7385565913).toString() return v3stats }, diff --git a/protocols/smbswap/index.ts b/protocols/smbswap/index.ts index 7aef2ff6e3..770fbf195b 100644 --- a/protocols/smbswap/index.ts +++ b/protocols/smbswap/index.ts @@ -110,6 +110,7 @@ const methodology = { } const adapter: BreakdownAdapter = { + version: 2, breakdown: { v1: { [DISABLED_ADAPTER_KEY]: disabledAdapter, @@ -117,12 +118,11 @@ const adapter: BreakdownAdapter = { }, v2: { [CHAIN.BSC]: { - fetch: async (timestamp, chainBlocks) => { - const volume = await graphs(CHAIN.BSC)(timestamp, chainBlocks) + fetch: async (options: FetchOptions) => { + const volume = await graphs(CHAIN.BSC)(options) return { dailyFees: volume.dailyFees, dailyVolume: volume.dailyVolume, - timestamp } }, start: startTimes[CHAIN.BSC], diff --git a/protocols/uniswap/index.ts b/protocols/uniswap/index.ts index becfef4538..1312f71932 100644 --- a/protocols/uniswap/index.ts +++ b/protocols/uniswap/index.ts @@ -229,21 +229,21 @@ const fetchV2 = async (options: FetchOptions) => { const adapter: BreakdownAdapter = { - version: 1, + version: 2, breakdown: { v1: { [CHAIN.ETHEREUM]: { - fetch: async (timestamp, chainBlocks) => { - const response = await v1Graph(CHAIN.ETHEREUM)(timestamp, chainBlocks); - const keys = [ - "dailyUserFees", - "dailyProtocolRevenue", - "dailySupplySideRevenue", - "dailyHoldersRevenue", - "dailyRevenue", - "dailyFees", - ]; - for (const key of keys) { + fetch: async (options) => { + const response = await v1Graph(options.chain)(options); + const keys = { + "dailyUserFees": options.createBalances(), + "dailyProtocolRevenue": options.createBalances(), + "dailySupplySideRevenue": options.createBalances(), + "dailyHoldersRevenue": options.createBalances(), + "dailyRevenue": options.createBalances(), + "dailyFees": options.createBalances(), + }; + for (const key of Object.keys(keys)) { if (typeof response[key] === 'string') { keys[key].add(ETH_ADDRESS, Number(response[key]) * 1e18); } @@ -258,8 +258,8 @@ const adapter: BreakdownAdapter = { }, v2: { [CHAIN.ETHEREUM]: { - fetch: async (timestamp, chainBlocks) => { - const response = await v2Graph(CHAIN.ETHEREUM)(timestamp, chainBlocks); + fetch: async (options) => { + const response = await v2Graph(options.chain)(options); response.totalVolume = Number(response.dailyVolume) + 1079453198606.2229; response.totalFees = Number(response.totalVolume) * 0.003; From 35b2682894f898b58ee0e5d82c7c565192e65580 Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 25 Jul 2024 18:05:14 +0000 Subject: [PATCH 102/105] add zklink --- fees/zns/index.ts | 8 ++++++++ helpers/chains.ts | 1 + 2 files changed, 9 insertions(+) diff --git a/fees/zns/index.ts b/fees/zns/index.ts index be0a9e1628..4426cb0ee4 100644 --- a/fees/zns/index.ts +++ b/fees/zns/index.ts @@ -19,6 +19,7 @@ const addresses: TAddress = { [CHAIN.XLAYER]: "0x71709a5f1831ba48c414375fb6a58662a40c01b5", [CHAIN.ZORA]: "0xf180136DdC9e4F8c9b5A9FE59e2b1f07265C5D4D", [CHAIN.BOBA]: "0xf1D09DA87c50820eD3b924aFf3C37058eD6eA40e", + [CHAIN.ZKLINK]: "0xe0971a2B6E34bd060866081aE879630e83C4A0BD", }; const methodology = { @@ -160,6 +161,13 @@ const adapter: Adapter = { methodology, }, }, + [CHAIN.ZKLINK]: { + fetch: fetchLogsAndCalculateFees, + start: 1719631449, + meta: { + methodology, + }, + }, }, }; diff --git a/helpers/chains.ts b/helpers/chains.ts index dcfba151ee..38e1556ee2 100644 --- a/helpers/chains.ts +++ b/helpers/chains.ts @@ -159,6 +159,7 @@ export enum CHAIN { TAIKO = "taiko", SKALE_EUROPA = "skale_europa", IOTAEVM = "iotaevm", + ZKLINK = "zklink", } // DonĀ“t use From e515b30256d02465681273d7ffe7ad04626872d7 Mon Sep 17 00:00:00 2001 From: maxwell-1999 Date: Fri, 26 Jul 2024 13:06:48 +0530 Subject: [PATCH 103/105] Added USDC_V5 pool fee & revenue --- fees/buffer/index.ts | 44 +++++++++++++++----------------------------- 1 file changed, 15 insertions(+), 29 deletions(-) diff --git a/fees/buffer/index.ts b/fees/buffer/index.ts index a41ec83207..d2da616c39 100644 --- a/fees/buffer/index.ts +++ b/fees/buffer/index.ts @@ -1,60 +1,46 @@ import { CHAIN } from "../../helpers/chains"; import { request, gql } from "graphql-request"; -import type { ChainEndpoints } from "../../adapters/types" -import { Chain } from '@defillama/sdk/build/general'; +import type { ChainEndpoints } from "../../adapters/types"; +import { Chain } from "@defillama/sdk/build/general"; import BigNumber from "bignumber.js"; -import { Adapter } from "../../adapters/types" +import { Adapter } from "../../adapters/types"; const endpoints = { - [CHAIN.ARBITRUM]: "https://subgraph.satsuma-prod.com/e66b06ce96d2/bufferfinance/v2.5-arbitrum-mainnet/api" -} + [CHAIN.ARBITRUM]: "https://satsuma-dump.buffer.finance/", +}; export function _getDayId(timestamp: number): string { let dayTimestamp = Math.floor((timestamp - 16 * 3600) / 86400); return dayTimestamp.toString(); } -const graphs = (graphUrls: ChainEndpoints) => { +const graphs = (baseUrls: ChainEndpoints) => { return (chain: Chain) => { return async (timestamp: number) => { const dateId = _getDayId(timestamp); - const graphQuery = gql - `{ - defillamaFeeStat(id: ${dateId}) { - fee - } - }`; - - const graphRes = await request(graphUrls[chain], graphQuery); - - const dailyFee = new BigNumber(graphRes.defillamaFeeStat.fee).div(1000000); - // const protocolRev = new BigNumber(graphRes.dailyRevenueAndFee.settlementFee).div(1000000).times(0.05); - // const userHolderRev = new BigNumber(graphRes.dailyRevenueAndFee.settlementFee).div(1000000).times(0.4); - // const supplySideRev = new BigNumber(graphRes.dailyRevenueAndFee.settlementFee).div(1000000).times(0.55); - const dailyRev = new BigNumber(graphRes.defillamaFeeStat.fee).div(1000000); + const url = new URL(baseUrls[chain]); + url.searchParams.append("day", dateId); + const response = await fetch(url); + const dailyFee = (await response.json()).fee / 1000000; return { timestamp, dailyFees: dailyFee.toString(), - // dailyProtocolRevenue: protocolRev.toString(), - // dailyUserHolderRevenue: userHolderRev.toString(), - // dailySupplySideRevenue: supplySideRev.toString(), - dailyRevenue: dailyRev.toString() + dailyRevenue: dailyFee.toString(), }; }; }; }; - const adapter: Adapter = { adapter: { [CHAIN.ARBITRUM]: { - fetch: graphs(endpoints)(CHAIN.ARBITRUM), - start: 1674950400 , + fetch: graphs(endpoints)(CHAIN.ARBITRUM), + start: 1674950400, }, }, - version: 1 -} + version: 1, +}; export default adapter; From 02e21368dca3ab6e593f9992af58198edf6eb2c1 Mon Sep 17 00:00:00 2001 From: 0xpeluche <0xpeluche@protonmail.com> Date: Fri, 26 Jul 2024 13:49:20 +0200 Subject: [PATCH 104/105] add daily fees --- fees/silo-finance/index.ts | 66 +++++++++++++++++++++++--------------- 1 file changed, 41 insertions(+), 25 deletions(-) diff --git a/fees/silo-finance/index.ts b/fees/silo-finance/index.ts index 44422120c3..6e8aed81ed 100644 --- a/fees/silo-finance/index.ts +++ b/fees/silo-finance/index.ts @@ -2,6 +2,11 @@ import { Chain } from "@defillama/sdk/build/general"; import { Adapter, FetchOptions, FetchResultV2 } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; +type FeeResult = { + asset: string; + fee: bigint; +}; + type IFactory = { address: string; block: number; @@ -135,8 +140,11 @@ async function getSilosAssets( async function getSilosFeesStorage( rawSilos: ISilo[], - { api }: FetchOptions -): Promise<{ asset: string; fee: bigint }[]> { + { fromApi, toApi }: FetchOptions +): Promise<{ totalFeesResults: FeeResult[]; dailyFeesResults: FeeResult[] }> { + const totalFeesResults: FeeResult[] = []; + const dailyFeesResults: FeeResult[] = []; + const calls = rawSilos.flatMap((silo) => (silo.silos || []).flatMap(({ silo: siloAddress, assets }) => assets.map((asset) => ({ @@ -146,31 +154,30 @@ async function getSilosFeesStorage( ) ); - const assetsInSilosRes = await api.multiCall({ - calls: calls, - abi: "function protocolFees(address _silo, address _asset) view returns (uint256)", - }); + const [prevFeesInSilosRes, currFeesInSilosRes] = await Promise.all([ + fromApi.multiCall({ + calls: calls, + abi: "function protocolFees(address _silo, address _asset) view returns (uint256)", + permitFailure: true, + }), + toApi.multiCall({ + calls: calls, + abi: "function protocolFees(address _silo, address _asset) view returns (uint256)", + permitFailure: true, + }), + ]); - const feesMap: { [key: string]: { [key: string]: bigint } } = {}; calls.forEach((call, index) => { - const [siloAddress, asset] = call.params; - if (!feesMap[siloAddress]) { - feesMap[siloAddress] = {}; - } - feesMap[siloAddress][asset] = assetsInSilosRes[index]; - }); + const [_siloAddress, asset] = call.params; + const prevFee = prevFeesInSilosRes[index]; + const currFee = currFeesInSilosRes[index]; - const results: { asset: string; fee: bigint }[] = []; - rawSilos.forEach((silo) => { - (silo.silos || []).forEach((s) => { - s.assets.forEach((asset) => { - const fee = feesMap[s.silo]?.[asset] || 0n; - results.push({ asset, fee }); - }); - }); + if (!prevFee || !currFee) return; + totalFeesResults.push({ asset, fee: currFee }); + dailyFeesResults.push({ asset, fee: BigInt(currFee - prevFee) }); }); - return results; + return { totalFeesResults, dailyFeesResults }; } async function fetch( @@ -178,15 +185,24 @@ async function fetch( rawSilos: ISilo[] ): Promise { const totalFees = options.createBalances(); + const dailyFees = options.createBalances(); + const rawSiloWithAddresses = await getSilos(rawSilos, options); const siloWithAssets = await getSilosAssets(rawSiloWithAddresses, options); - const feesInSilos = await getSilosFeesStorage(siloWithAssets, options); + const { totalFeesResults, dailyFeesResults } = await getSilosFeesStorage( + siloWithAssets, + options + ); - feesInSilos.forEach(({ asset, fee }) => { + totalFeesResults.forEach(({ asset, fee }) => { totalFees.add(asset, fee); }); - return { totalFees }; + dailyFeesResults.forEach(({ asset, fee }) => { + dailyFees.add(asset, fee); + }); + + return { totalFees, dailyFees }; } const adapter: Adapter = { From 28d0fc5ba64ea2c7b7261931365f4730d3758eee Mon Sep 17 00:00:00 2001 From: Define101 Date: Fri, 26 Jul 2024 14:39:09 +0100 Subject: [PATCH 105/105] fix betmode --- fees/betmode.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/fees/betmode.ts b/fees/betmode.ts index dface90387..ae179e5afd 100644 --- a/fees/betmode.ts +++ b/fees/betmode.ts @@ -1,14 +1,14 @@ import { FetchOptions, SimpleAdapter } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; -const address = '0x79b4be7eD13Eef58Bd15ABd6ed79569f21D6c3AF' +const address = '0xeb5D5af6a0ac3B64243858094d6b3b379B8772Aa' const fetch = async (options: FetchOptions) => { const dailyFees = options.createBalances(); - const feesStart = await options.fromApi.call({target: address, abi: "uint:totalWagered"}) - const feesEnd = await options.toApi.call({target: address, abi: "uint:totalWagered"}) - dailyFees.add("0xDfc7C877a950e49D2610114102175A06C2e3167a", feesEnd-feesStart) - dailyFees.resizeBy(0.01) - return {dailyFees, dailyRevenue: dailyFees} + const feesStart = await options.fromApi.call({ target: address, abi: "uint:GGR" }) + const feesEnd = await options.toApi.call({ target: address, abi: "uint:GGR" }) + dailyFees.add("0xd988097fb8612cc24eeC14542bC03424c656005f", feesEnd - feesStart) + dailyFees.resizeBy(0.065) + return { dailyFees, dailyRevenue: dailyFees } } const adapter: SimpleAdapter = {